First of all, do you call OnDraw yourself? You should call SpriteEngine.Draw instead

If that's not the sollution, does your DoDraw procedure contain "inherited;". This reserved-word calls the DoDraw procedure implemented by the ancestor class (Probably TImageSprite), which means that the sprite will be rendered twice.

If the problem persists, i suggest you to step through your code using breakpoints. Put breakpoints in the DoDraw procedures and one at "SpriteEngine.Draw". Start stepping through your code from there to what get's called. No doubt you'll be able to figure it out.

As a last resort you can also use TSprite instead and implement all specific rendering yourself.

Hope it helps.