I use a two pass system. Pass one does all the background tiles (ie Ground).

Pass two does all the Objects on the map.

Whenever a sprite moves I remove it from the drawing list it is in, move it, then put it back into the list - in an ordered position.