Someone will correct me if I'm wrong, but my understanding is that the G54 offset is your work offset and reflects the distance between work zero and machine zero. If you home the machine, everything should be zero. If you jog somewhere else and zero all (set your work zero), machine coordinates and work offset will match and current position will be zero. If you jog again and hit zero all, again, machine coordinates and work offset change to the same number and current position goes to zero.
If you set a G52 offset to say G52X2Y2, G92 offset changes to X2 Y2 and current position changes to X-2 Y-2. If you jog now and hit zero all, machine coordinates and work offset stay the same while current position goes to X-2 Y-2. Now if you MDI G52X0Y0, current position and work offset go to zero.
My understanding is that G54 always represents the distance from machine zero to work zero and you can not just change that G54 value...unless you home the machine.
In your case, if you are setting your work zero properly and your gcode is referencing work coordinates and not machine coordinates, it should work propely. For instance, if your DRO's are zero'd out, G90 G00 Z-1 would sent the Z down 1" relative to it's current position in work coordinates (zero). G90 G53 G00 Z-1 would send the Z to -1" relative to machine zero, wherever that may be.
We always had issues in Mach3 homing. When the machine was referenced, it would lose position now and then. No issues when the machine was not referenced. For that reason, we never referenced the machine, we just worked from work zero. Mach4 is not that way. Homing in Mach4 is very predictable and works great. If you're trying to run with the machine de-referenced, try homing it and see if that helps.