Looks to me like the problem is $('html,body').scrollTop is returning 0 in Mobile Safari where ever you are on the page.
That makes .animate think it needs to start from 0 (coz that's where it thinks it currently is). I'm pretty sure this is something which is isolated to Mobile Safari though as it's working fine in my desktop version.
The only way I seem to be able to get the real scroll position is though $(window).scrollTop() and $(document).scrollTop() but I don't think you can call .animate on them (or at least that's not working for me) so I ended up writing a setTimeout function and animating it manually.
I'm really not much more than a beginner with jQuery though so maybe someone could find away to use this to get .animate to work correctly.