I've posted the relevant parts of the source to
http://www.emuvibes.com/Src.zip
It starts in Sprites.c with AddSprite, which does work correctly.
Then any changes in the sprite's position or graphics causes AddEraseBlock to be called.
These are restored starting in WaitVBlank in Routines.s. WaitVBlank calls RestoreBackground, which processes through the EraseBlock structure looking for any used EraseBlocks. RestoreBackground calls BlitBack for each block found.