Due to the fact that Microsoft takes it upon themselves to turn off a Flow that "Fails", I now try to terminate with a "Cancel", instead of "Fail", whenever possible. For example, logical errors get a Cancel, but calls to a Child Flow that choke still get a Fail.
To do this, initialize a variable, called strFlowStatus, to "Success".
Whenever a trapped error happens, set the variable to "Cancel" when in that branch.
If the Flow truly fails, meaning a non-bizlogic fail, then set the variable to "Fail".
At the end of the Flow, add a Switch Action, and Handle each status, "Success", "Cancel", and "Fail", separately.
For extra credit, when there is a true Fail, I send an email to myself.