In my original code, adding Thread.yield() or Display.sync(100) smooths it out better after Display.update(). I'm still worried about using Display.sync though... Also in original code, shipX & shipY should be doubles with no int conversion, just wasn't thinking when I typed it up here.
I tried Sys.getTime(), but it was choppier. I looked at the resolution, and it's 1000, so it uses milliseconds and is less accurate than nanoTime, which I blame as the culprit.