For systems using U-Boot you can use the bootcount[1] feature to detect the failure and react by booting into the old environment.
Edit: This doesn't cover your running instability case, but that seems more like a feature that should be implemented using a user space watchdog.