This is a well known (long standing) issue. Documented in the code base in commit eea02be70ee37b845f2719b3c08e5baf4b6f51f6.

Countless intermittent sanitizer warnings can be attributed to it.
{
    auto connman = MakeUnique<CConnmanTest>(0x1337, 0x1337);
    auto peerLogic = MakeUnique<PeerLogicValidation>(connman.get(), nullptr, *m_node.scheduler, *m_node.mempool);
    const Consensus::Params& consensusParams = Params().GetConsensus();
    constexpr int max_outbound_full_relay = 8;
    CConnman::Options options;
    options.nMaxConnections = 125;
    options.m_max_outbound_full_relay = max_outbound_full_relay;
    options.nMaxFeeler = 1;
    connman->Init(options);
    std::vector<CNode *> vNodes;
    
    for (int i=0; i<max_outbound_full_relay; ++i) {
        AddRandomOutboundPeer(vNodes, *peerLogic, connman.get());
    }
    peerLogic->CheckForStaleTipAndEvictPeers(consensusParams);
    
    for (const CNode *node : vNodes) {
        BOOST_CHECK(node->fDisconnect == false);
    }
    SetMockTime(GetTime() + 3*consensusParams.nPowTargetSpacing + 1);
    
    
    peerLogic->CheckForStaleTipAndEvictPeers(consensusParams);
    BOOST_CHECK(connman->GetTryNewOutboundPeer());