I'm not familiar with your control or system so I'll keep this simple.
G90 is Absolute Positioning Mode in most milling machines. You will likely do 90% of your work in that mode. Those absolute coordinates are referenced from your Work Offset G54, which is itself referenced off of Machine Zero.
You're right, there is no reason with the programming you supplied that the Z axis should move at that point. There must be some wires crossed. Somewhere you have a physical, electro-mechanical problem, or incorrect setting in your control. Controls will not make up stuff upon their own. Like a Z move that was as yet not asked for. Maybe try putting G90 and G54 in the line before the move. Not likely to help but give it a try. Are you positive this code you're sharing is exactly what was run on the machine?
Unless your Toll Change functionality is limited, there is little use for all that G28 stuff at the head of your program. All the needed positioning to Home-For-Tool-Change should be built into the tool change functionality called by M6. I've programmed for a couple decades without ever calling G28. It's seldom needed. G53 is a better bet, but that's a different story.