sleep actually means "wait for at least this amount of time". In no way does it guarantee that it will wait for exactly that amount of time. The earliest that the command can finish and allow the next command to run is on the next frame, so the absolute most you can run a loop with a sleep 0.001 in is one iteration per frame.
However, as I said, sleep says "wait for at least this amount of time" which does not guarantee synchronisation with the graphics frame. Because of this, your jerkiness certainly has nothing to do with the amount of processing that your loop is performing, which is actually minimal; you don't actually need it to be faster, but you do need it to be synchronised. To ensure perfect synchronisation, you should use waitUntil, which does guarantee to always iterate exactly once every frame (and you'll also notice that I avoided messing about with maths by using modelToWorld):
waitUntil
{
if (! (dropping)) AND (alive player) AND (_box distance player <= 3) AND (speed player < 15) AND (vehicle player == player) then
{
_box setdir getdir player;
_box setpos (player modelToWorld [0, 1.118, 0.6]);
false; // Don't break the waitUntil loop.
}
else
{
true; // Break out of the waitUntil loop.
};
};