Looks like I'm alone with this problem. :)
Anyway, I think the simplest solution would be to write each replace independantly (e.g. if isnull(Trans.field) and not isnull(cursor.field) replace...)
If I would have lots of fields I may save the record with scatter name, then do replace, then compare saved and new and if they are the same, revert changes...
If it's not broken, fix it until it is.
My Blog