Strange, but could this be caused by the Probation Period from the
Update Control Service?
See this note from: http://legato.io/legato-docs/latest/c_updateCtrl.html
If a reboot occurs during the probation period, the probation period will start over. But, if the system reboots more than a few times without reaching the end of its probation period first, then the system will be rolled-back to the last known "good" system.
Updated or modified systems enter a probationary period (default 30 minutes) during which time an app or framework daemon failure will result in a roll-back to the previous "good" system. For development and testing, you can mark a system good (pass), bad (fail) or defer.
I wonder if your app entering ULPM and shutting down/rebooting several times before it has been marked as good, which takes 30 minutes unless you manually mark it as good, is causing the system rollback, thus removing your app?
You could try using the Update Control API and have your app call
Alternatively, you could try increasing the ULPM timeout to 30 minutes instead of 10? See if that helps.