I think i've determined the causes;
Whenever the client receives an update, it gets the delta between the prediction for that tick and the actual server copy.
I was sending the last received delta update, and the client then set that as the update to apply the delta to, however due to the upstream latency
this wasn't acknowledged by the server until too late.
Why is using a delta advantageous? Apparently float sizes are the same.
Edited by Angus Hollands, 19 June 2012 - 02:58 PM.