In fixing bug 687770, I discovered that gx_device_copy_color_procs() copies over the old-style procs (map_rgb_color and the like), but not new-style (encode_color and the like). I patched that locally to gs_make_null_device, but it's possible the change should go in for all uses of forwarded null devices. This bug is a reminder to check those other uses to see whether the change would do harm or good. Another minor and related code cleanup would be to fix the UMR of the device_color variable (which is stored in an identically named field in the image enum) in gx_image_enum_begin. It seems to be uninitialized in the masked case, then referenced later when evaluating tiles_fit in image_render_mono(). I'm not sure whether a default value of true or false makes more sense.
I am going to close this. Where this operation is used the encode and decode procs are set to forward to the target device and I don't really see any issue with that.