I don't think that gecko can animate backgroudPosition efficiently.  If I turn on FPS and "flash repainted area" I can't get faster than 20fps on unagi, and the entire screen repaints on each motion.

For performance, I think you're going to need to use an <img> element instead of a <div> with background image.  This will mean, however, that you won't need the offscreen tmpImg, at least.

To move it around efficiently, you'll need to use CSS transform: translate(dx,dy).  It might be easiest to keep the image at its full natural size, and include a scale() in the CSS transform.  Or, you can scale manually by setting the image width and height.