I had the same issue with my brand new m5 FIRE. While browsing the option in UIFlow I stumbled upon the Hardware -> Power -> setCharge() function. In UIFlow Python this is power.setCharge(). Regardless of the parameter (true or false) this badly messes up the power state of m5 FIRE. Currently I am running UIFlow v1.9.0-fire but the issue was also there in the v1.8.x series.
After using setCharge() the m5 will not power on while on battery. It will only power on when powered over USB. Disconnecting the USB cable powers it off. Very unfortunate state to be in.
I was finally able to restore the desired state (turn off by press power button twice, turn on again with power button) using Arduino IDE with these statements:
M5.Power.setPowerBoostOnOff(false); //Change the power on / off method. The power does not turn off when connected via USB. true=Press and hold to turn on / off. false=Turn on / off with two short presses.
M5.Power.setPowerBoostSet(false); //Change the power on / off method true=ON / OFF in one short press. false=same as above
M5.Power.setPowerVin(true); //When the power supply from USB etc. is cut off, Decide whether to turn on the power again.
M5.Power.setPowerBtnEn(true); //Set whether to accept the power button.
M5.Power.setPowerBoostKeepOn(false); //Always output power. True= Always output power. False=not Always output power.
M5.Power.setAutoBootOnLoad(true); //Set whether to automatically start when power consumption occurs
Strangely enough using M5.Power.setCharge() in Arduino IDE does not cause any issues at all. It seems to me that the UIFlow setCharge() function is broken for m5 FIRE boards.