I am also working with virtual machine images, and just posted a new suggestion to make use of a second spindle, where available, for temporary storage. This should make a significant difference in performance by reducing head seek activity.
Now that's an interesting thought, but for one small problem, I think. You're assuming that the OS will make use of the gap to expand the file. I suspect NTFS will not.
I'm intrigued at the problems in defragging, but not yet enough so to begin writing my own
One possibility you may wish to consider: I understand that Ghost does an excellent job of packing files in contiguous chunks, free from gaps. You could do a Ghost backup from the source drive to a different target, then back again. Yeah, I know, two moves, where one should serve. But on the move back, both drives should spend most of their time simply stepping to adjacent tracks, which is way faster than random seeks.