Finally found a legit issue in the network stack. The three main session types (inbound, outbound, manual) have a timer (from session base) embedded in the main retry loop, to prevent tight looping in the case of conditions like network offline, no addresses, etc. But the timer is a member of the session, so it has one clock. This gets reset each time there is a new failure event. That's common in the case of these failures, because sessions manage groups of connection attempts. So I need to rethink the approach to these delays, or just remove them. They are mitigated somewhat by the fact that each action is posted to the p2p (network or node) strand.
(edited)