Unfortunately that's one of the things I tried initially. However, I noticed in the documentation that there was a special
get_camera_pos() member of Camera2D. After playing around I have narrowed down the problem I think:
get_parent().get_node("Camera2D").set_pos(position + direction*speed*delta)
print("CAMERA NODE POSITION")
CAMERA NODE POSITION
426.538422,262 <--- Correct
413.232819,262 <--- A frame behind
So the position of the camera node is being updated immediately, but the position of the actual camera (viewport) is clearly not being updated until the next frame, after everything has already been drawn.
Hopefully there is a way to fix this short of altering the godot source code? I wouldn't even know where to look... haven't had the pleasure of diving into that just yet.