I will just add my 2 cents so there is another voice to this discussion. My requirements differ from those of ingemar.
If I am understanding your limitation, to require another imagesheet that more or less mirrors the original sprite’s imagesheet in size and frame structure, it would fail in purpose for me. If I need twice the texture memory to achieve the effect, it would just be better to make the second imagesheet the sprites + overlay already combined in photoshop and just switch up the sprite.
Ideally the compositePaint would just not need paint1 (this would be whatever frame the sprite is) and paint2 would need to be an image big enough to cover the largest frame used in that sprite object.
Below will be examples of what I am trying to accomplish. The examples shows one sprite frame, 3 overlay graphics that are the size of the frame and the end results with the overlays blended into the frame for different effects (frozen, burning, poisoned). Three small images, that if made the right size I could use across multiple sprite object in an entire game.
The sprite frame.

Example of frozen.
