Although i don't see anything could be causing that problem, in my opinion there are a few changes i would do to the code.
First, i think move_and_slide() shouls be called inside _physics_process() instead than in _process() because it involves physics calculations. Second, i think you should update your movement like this:
movement = direction * speed
movement = move_and_slide(movement)
So movement gets updated. In your actual code is the same, but i think is a good practice to update the movement in case you want to use it in another place od your code later.
About the position issue, could you share us the script where the ship gets instantiated and its position is set?