This isn’t a bug, but just how planes are defined in Rhino. I agree it can be a bit counterintuitive at first, particularly when it comes to mirroring, but once you know what behaviour to expect it does make sense.
Planes always maintain their handedness - Z is determined by X and Z, not something you can set separately.
Note that in your first example, if you look at the Z axis of your vertical plane, it is not getting mirrored in the World XY plane, but gets reversed:
Given the Plane (coloured) to be mirrored in some reference (white) - the origin of the Plane and the X and Y vectors/“ends of its X and Y axes”, for want of a better term, are reflected in the white axes. From which the X and Y axes of the new Plane are “reconstituted”.
And because Z is just a product of X and Y axes of the new Plane (and handedness is always maintained), it happens to have the same direction as its predecessor?