To be clear, is your ULP program ending immediately after it reports the power supply down state? Or does it continue to run while in deep sleep?
Are you confident that the problem is that the ULP program isn't running, or is it possible that it's running but there is some other problem (eg. pin not configured, unable to interrupt, etc)? Suggest implementing a simple counter that the ULP increments each loop so you can check for a heartbeat from the main program.
Does the ULP use the same pin as ext0 wakeup - LG_GPIO_PSDOWN - for the analog read? There are a couple points to note here:
https://docs.espressif.com/projects/esp ... akeup-ext0
-Ext0 is incompatible with ULP wakeup source. I assume this means incompatible with ULP interrrupts while the SoC is awake too, which might be how you're having the ULP report the detected state. I don't think that's the problem here though, they don't seem to be enabled simultaneously.
-"After wake up from sleep, IO pad used for wakeup will be configured as RTC IO. Before using this pad as digital GPIO, reconfigure it using rtc_gpio_deinit(gpio_num) function." Maybe try reconfiguring the pin for ULP ADC on wakeup?