Great information, kbenson. Thanks! I am actually doing something similar, but I'm curious about this comment:
Note: I'm re-showing all the canvas objects when creating a new one, but since I'm strictly advancing the layer I could omit this, but I included it to show that it does work with the delay I mentioned.
If you don't do the Show() for the canvases beneath, don't you get "smearing" in the case of an animated element on the top canvas? In my experience, if you don't have a background on the current canvas, an animated element just gets redrawn on top of what's already on the screen. I suspect a Show() on the canvas beneath would eliminate that, but probably also has some measurable performance hit associated with it.