Great detective work @Hootie81! Confirmed your findings that deep sleep must be called once which will allow hard resets (and actually soft resets as well). I think what this means is whatever deep sleep is doing, is also something that needs to be enabled with:
The one thing I’m still not getting to work though is even after I put the photon to deep sleep, if I turn it’s USB power off while VBAT is still powered from a second Photon’s 3V3 and GND, the first photon will reinitialize it’s retained variables when I power it back up. It should also work if I don’t call deep sleep and doesn’t, but we found there is some extra initialization to backup ram with deep sleep code.
Deep sleep also seems to make the software reset function properly as well. If I don’t deep sleep once while VIN is powered, it doesn’t seem to retain variables after I OTA code that starts System.reset()'ing instead of deep sleeping.
I’ll dig into what exactly deep sleep is doing that’s so magical.
EDIT: It appears to work when not using the RTC as well, i.e.,
HAL_Core_Enter_Standby_Mode(); is the next thing to dig into.