Problem: While the best header is at least a day old, a node normally selects one peer for initial headers sync.
An inbound or manual peer can answer with valid empty headers and remain selected, so another eligible peer is not asked.
Empty headers may mean that the peer is caught up with the node or stuck at the same height, so the response is not misbehavior.
When no other preferred download peer is available, the headers timeout will not release the peer, and automatic outbound eviction does not apply.
Fix: Release an inbound or manual peer from initial headers sync after an empty response while the best header is stale and cancel its download deadline, allowing another eligible peer to take over. Restart the normal response window when releasing the slot so the same peer is not immediately selected again. A new block announcement can still trigger the existing one-shot request. Automatic full-relay and block-relay peers keep their existing headers timeout and old-chain eviction behavior.
<details><summary>Manual reproducer</summary>
Both runs use the checked-out build/bin/bitcoind, with the downloaded Python script supplying only two inbound P2P peers.
{ cmake -B build && cmake --build build -j10 --target bitcoind; } >/dev/null 2>&1
build/bin/bitcoind -regtest -daemonwait -datadir="$(mktemp -d)" -connect=0 -listen=1 -port=18455
time python3 <(curl -fsSL https://gist.github.com/l0rinc/39e471dd6835fe332205d3812ebb9e92/raw)
killall bitcoind
The fixed node returns as soon as the replacement peer receives getheaders.
On the old node, that wait times out after 10 seconds because the initial peer is still treated as active.
</details>
Fixes #34096