G28 is good protection to assure that the tool is starting from a known position all the time. Multiple G50 calls is a good way to get lost in the woods
To use one and only one G50 call, you need to set all the tool length/radius offsets relative to a master tool, perhaps tool 1 (a finisher would be good), instead of setting the tools to the part reference point. In this system, you would have tool offsets for the master tool of very nearly Z0 X0, and all the other tools would be relatively small amounts compared to that, because it would only be the difference in position between their tool reference and the master tool.
So then the G50 call would represent the distance of the master tool from the part (work) reference.
Now whether the PLC in your controller permits a tool change at other positions other than turret home might be a good question.
Nonetheless, after a program interruption, you absolutely must return the machine to the G28 before the G50 is re-read.
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)