Here’s some code I wrote to help deal with it:
exten => s-CHANUNAVAIL,1,Set(PEERIP=${SIPPEER(${MACRO_EXTEN}:ip)})
exten => s-CHANUNAVAIL,n,System(/usr/bin/wget --http-user=admin --http-password=secret --post-data="resetOption=0" http://${PEERIP}/reset.html)
Tomorrow, I’ll install the new firmware (1.4.0). I’m currently running 1.3.0. I can’t seem to find a list of what Aastra fixed in this release. I’m hoping this mystery problem has a fix included in the new firmware.
can’t you reboot an aastra by sending it a check-sync with sip notify? also just curious but what does sip debug say when it goes into useless mode?
Figured it out.
The system was marking the phone lagged. I didn’t think I’d set up monitoring, but apparently there’s a default setting of 200ms.
qualify=400 in sip.conf fixed it. No more “is LAGGED” messages and no more dead phone.
I guess I was wrong to think omitting “qualify” from my sip.conf entirely would shut it off (an effective “qualify=999999999999”). 
IronHelix, your question prompted me to turn up my verbosity and stare at the console long enough to see it happen. Thanks.
if you put qualify=no it will disable it. You probably have it enabled in the general section, which also applies to the peers unless specifically overridden.
Glad i could help 
Just following up…
These phones lock up because of a firmware bug. Phones that see high traffic will lock up sooner. Rebooting nightly masks the problem so long as you don’t get too many calls in a given day.