Hi eng101,
That is the way it is coded.
The Interpreter moves to the specified intermediate position (either incremental or absolute) then the XYZ Axes move to the home position.
So G91 G28 Z0 indicates an incremental move of 0 and then the XYZ Axes move to the home position.
To move Z to absolute 0 first code G90 G28 Z0
Regards