The main reason why your sprites are not synchronized is the fact that when you are creating them or modifying them upon map move you are setting their current animation position to 0 but instead you should set animation position to the current animation position.
So basically you need to keep track of water animation. You can do this by having one Global numerical variable which is increased at the same intervals as animation pictures needs to be changed. And then to find out which is current animation position you calculate using Mod command:
Code:
AnimationPos := GlobalAnimCounter mod AnimationCount;
If you do this you shouldn't forget to reset GlobalAnimCount to 0 after some time othervise you will exceed maximum integer value which can lead to problems.

Anywhay I'm currently at work so Iall I can give you now is general idea. But when I come home I intend to download Aspyhre eXtreme and SpriteEngine so I would be able to actually compile your source and therefore be able to test some ideas directly by changing your code.
I have already given some thoughts about how to make map smothly scrolable to be used in your game but I need to check whether it is posible to do this using your sprite engine.
I was also thinking about how to implement your game map in most eficient way (what would be the best way of storing information for all your needed layers).

So stay tuned and await more of my suggestions shortly.