I think of G92 as a shift of the G53 machine coordinate system. And since G53 underlies all the other work offsets, a G92 command will cause a proportionate shift of all work offsets.
There is no effective way to cancel a G92 offset except to make a movement to a known position in the G53 machine coordinate system. Typically, this would be machine home. So you'd make a movement to machine home, and command G92 X0 Y0 Z0 at that position and it is effectively cancelled.
If you happen to run a Haas, it has G92 way down at the bottom of the list of work offsets. Every new G92 command has a cumulative effect, and if you go into the work offset register, you can view the accumulated G92 values. In the Haas, you can cancel the current G92 by entering all zeros into the G92 register.
It is valuable to know how to use G92...not so much for 3 axis work, but you can do some miracles saving time on multi-turn 4th axis work.
For repeats in a subroutine, you must be very careful to know exactly where you have the tool positioned at the moment the G92 is commanded, simply for the reason that the new G92 command will add its new values to the existing accumulated G92 values.
Starting over with G92 at the beginning of the program basically requires a return to machine home, with a command to set G92 X0 Y0 (you can leave any axis out if you are not making any adjustments in said axis) while at home position. Then you can proceed into the subroutine and use the G92 in an accumulative fashion again.
First you get good, then you get fast. Then grouchiness sets in.
(Note: The opinions expressed in this post are my own and are not necessarily those of CNCzone and its management)