I think your updated question shows exactly why the check for machine underflow was removed. In M11.1 we get:
CompiledFunction::cfn: Numerical error encountered at instruction 3; proceeding with uncompiled evaluation.
Notice that the error message says "proceeding with uncompiled evaluation".
Mathematica currently uses many libraries that support machine precision computations, and I expect many more to be added. Any time "uncompiled evaluation" occurs because of machine underflow, these libraries can no longer be used. Not only that, it is generally not possible to detect whether machine underflow might have occurred in these libraries, and so the "CatchMachineUnderflow"->True rule would not work.
I believe it is for these reasons that the "CatchMachineUnderflow" feature was removed.
Basically, to be able to use these new libraries, it is necessary that inputting a machine number into a function will always produce a machine number (or some other compilable type), especially within Compile.
z is not a machine number, the "CheckMachineUnderflow" system option does not play any role in your example. And there is a well documented way (
Accuracy) to check the accuracy of a number:
z = 1.00000000000000000;
Do[z = 2*z - z, 50];
Note that the your example behaves in exactly the same way in M12 and M11.3, so talking about a change in behavior in M12 is misleading at best.