I appreciate the conversation. I just want to make sure that I'm not missing something dumb. I honestly don't think there are any subpixels going on here.
The minimum movement for the ship is 1. In the code it's "x += global.playerSpeed" (which is 1). I've uploaded a video with it changed to key press. You can see the 10x10 ship has 74 positions it can be in. When running at full speed, it looks a lot smoother. If I put the game down at 30 frames a second or 15 frames a second, you can definitely see the locking in place.
Someone let me know if I'm off base here. Thanks!
And here it is running at full speed. Same 74 positions.