Solution suggestion
When you call your emulated freehold cycle stop, use the uccnc variable exec.actualmodal
Then do a conditional check
If exec.actualmodal == 02 || exec.actualmodal == 03
Then save the variables
exec.ArcstartposY and exec.ArcstartposY
You now have your arc start point coordinates.
Now when you run the emulated freehold restart, all you do is instead of moving to the stopped position X and Y move to the exec.ArcstartposY and exec.ArcstartposX and then run your restart.
That way the cycle start can rerun the same gcode line and it won't matter what mode the machine is in g90 /91 wise (exec.actualdistmode)
I would also suggest maybe saving not only the current work coordinates but also the current work offset (g54 etc) and also the machine coordinates using exec.Wa, exec.Wb etc (abcxyz), that way when you run a restart the machine goes back to the actual machine coordinates it left when you performed the emulated / advanced freehold routine.
I would also suggest saving variables
exec.actualSS (spindle speed)
exec.lastfeed (federate)
And maybe
exec.actualfeedoverride
That way when you press cycle restart....you set the machine up exactly how it was when you called the emulated or advanced freehold
Also consider saving and using variablre
exec.gcodelinenumber
That way you perform a conditional check at restart to make sure the machine is actually still on the same gcode line number
Just a thought