This is my understanding of what is happening, do note that I've called cellular.off before it goes to sleep:
0000445710 [system.sleep] TRACE: Entering system_sleep_ext()
Sleep requested while modem is still considered active
0000445711 [system.nm] INFO: State changed: IFACE_UP -> IFACE_REQUEST_DOWN
0000445712 [system.nm] INFO: State changed: IFACE_REQUEST_DOWN -> IFACE_DOWN
0000445712 [system.nm] TRACE: Request to power off interface 4
Network manager requests modem power-off
0000445713 [system.nm] TRACE: Interface 4 power state: POWERING_UP
Conflict? modem is mistakenly marked as powering up instead of down
0000445714 [system.nm] INFO: State changed: IFACE_DOWN -> DISABLED
0000445714 [system.sleep] TRACE: Waiting interface 4 to be off...
Sleep waits for modem shutdown to complete
0000455662 [net.pppncp] TRACE: NCP event 3
0000455663 [net.pppncp] TRACE: NCP power state changed: IF_POWER_STATE_UP
0000455663 [system.nm] TRACE: Interface 4 power state changed: UP
0000455664 [ncp.client] TRACE: Modem powered on
Modem is powered on again, opposite of intended shutdown
0000455695 [ncp.at] TRACE: > AT
0000455695 [ncp.at] TRACE: < RDY
0000455701 [ncp.at] TRACE: < OK
0000455701 [ncp.client] TRACE: NCP ready to accept AT commands
DeviceOS begins modem boot/configure sequence again, as seen below:
0000455701 [ncp.at] TRACE: > AT+CFUN?
0000455812 [ncp.at] TRACE: < +CFUN: 0
0000455813 [ncp.at] TRACE: < OK
0000455813 [ncp.at] TRACE: > AT+CFUN=1,0
0000455859 [ncp.at] TRACE: < OK
0000455860 [ncp.at] TRACE: > AT+QGMR
0000455869 [ncp.at] TRACE: < EG91EFBR06A07M4G_01.007.01.007
0000455870 [ncp.at] TRACE: < OK
... (normal modem initialization continues)
0000456998 [ncp.at] TRACE: > AT
0000456998 [ncp.at] TRACE: < POWERED DOWN
Modem completes the original shutdown request here
0000457010 [ncp.at] TRACE: < OK
0000457011 [ncp.client] TRACE: NCP state changed: 1
0000457011 [net.pppncp] TRACE: NCP event 1
0000457012 [ncp.at] TRACE: > AT+QCFG="cmux/urcport",1
DeviceOS is still sending configuration commands to an off modem
0000457017 [ncp.at] TRACE: < OK
0000457018 [ncp.at] TRACE: > AT+CGEREP=1,0
0000457020 [ncp.at] TRACE: < OK
0000457020 [net.pppncp] TRACE: NCP event 3
0000457020 [net.pppncp] TRACE: NCP power state changed: IF_POWER_STATE_POWERING_DOWN
0000457021 [system.nm] TRACE: Interface 4 power state changed: POWERING_DOWN
0000457021 [ncp.client] TRACE: Try powering modem off using AT command
DeviceOS incorrectly attempts shutdown again using AT command
0000457022 [ncp.at] TRACE: > AT+QPOWD
0000457024 [ncp.at] TRACE: < ERROR
Tries to turn off the modem again, but
0000457524 [ncp.at] TRACE: > AT+QPOWD
0000457525 [ncp.at] TRACE: < +QIND: SMS DONE
0000457526 [ncp.at] TRACE: < ERROR
... (repeated QPOWD failures because modem is doing something else?)
0000460030 [ncp.client] ERROR: AT+QPOWD command is not responding
OS gives up on AT shutdown
0000460031 [mux] INFO: Stopping GSM07.10 muxer
... (mux shutdown)
0000460035 [ncp.client] TRACE: Powering modem off
0000481929 [net.pppncp] TRACE: NCP event 3
0000481930 [net.pppncp] TRACE: NCP power state changed: IF_POWER_STATE_DOWN
0000481930 [system.nm] TRACE: Interface 4 power state changed: DOWN
0000481931 [ncp.client] TRACE: Modem powered off
Not sure here, because it seems to be confirmed that modem is powered off, but through AT commands earlier it seems like it might not be? or is it confirmed?
0000481931 [ncp.client] TRACE: Deinit modem serial.
0000481932 [ncp.client] TRACE: Modem already off
0000481932 [ncp.client] TRACE: Soft power off modem success
0000481933 [ncp.client] TRACE: Deinit modem serial.
0000482015 [system.sleep] TRACE: Interface 3 is off already
Now it seems to be safe to sleep? But not always the case, and unsure why it seems to be doing the opposite of what is being requested. There's no tricky sequence of connects and disconnects. It simply disconnects from Particle, runs Cellular.off and waits for isOff to return true for 60 seconds. Then proceeds to sleep.