I don't know a great deal about cutter compensation, but, as far as I understand it, when cutter compensation is applied, you must then have a "run in" move for the tool - i.e. when you apply G41 or G42, the tool does not move to the new cutting position, but uses the next move to get into the right position. I assume it might take more than one move if the appropriate axis does not move (although thinking about it, that is doubtful, since, just moving one axis will get you into the right position)
If you are saying that, after you stop the program, for whatever reason, then restart, it says in the tutorials or the manual, that Mach 3 may take two or three moves to regain position.
I have recently been cutting some printed circuit boards, and I was having trouble with the Z axis not lifting properly, which caused the cutter to foul and then snap off (it is only 0.6mm). Stopping the machine had to be quick, but the point is, when restarting I had no idea where the tool was in comparrison to the program, particularly if I had jogged to change the tool.
I examined the GCode, and ran back to the last G0 movement, i.e. a move where the cutter was moving from one place to the other, without cutting. This would mean the cutter was well above the work, and the tool would move to the next cutting position accurately. This applied from whatever position I was at, whatever height the tool was at and whatever compensation I had on.
If you then looked at the code, the next move was "tool down", and the next move was "cut".
So, move back to a G0, click "set next line" and "run from here" and click "cycle start". The initial G0 move allows the cutter to move to the next position, apply the compensation, take a breath, and then get back to work again.
Restarting the program will obviously "start again" and if you look at the top of the 1024 Milling profile, you will see a list of the GCodes that are applied, and see that things are put back to a single profile, so that Mach kmows where to start from. If you look on General Config, left hand column, you will see a similar list of "tasks" when M30 is encountered.
We all have to, from time to time, stop in the middle of a run, but the thing is, after each stop, you must say to yourself "has the machine enough information to carry on from where it left off". This is particularly important if you use sub-routines and offsets, where information might be carried over. If the machine hasn't the right information, then performance is unpredictable.