Request filed! :-)
In the meantime, there is an easy workaround for this. You can use the CAL Domain Parameters extension to define a custom interpolant that covers the rectangular block of the input resource you want to copy. Then, set the domain to an equal-sized block on the output resource. Use an "identity" kernel (one that just copies its input to its output) to do the transfer. This should not involve the CPU at all.
One caveat is that the CAL Domain Parameters extension is not yet documented anywhere (as far as I can tell, anyways), so you will have to look at cal_ext.h and dig through the Brook+ source code to learn how to use it. This extension is how Brook+ implements its stream.domain() functionality. It's extremely useful and I'm beat as to why it is not documented anywhere.
As far as working with different formats, you can extend the "identity" kernel to do the type conversion during the copy.
Thanks for the info on domain parameters !
Will look into it.