Steps to reproduce:

* Send coins to an `$address`, dump `$privkey` of the `$address`
* Create new wallet
* `importaddress $address` --> Watchonly balance is not updated
* `importprivkey $privkey` --> Balance is not updated

Needs a restart to get fixed. See also #11477 
void CWaet::ReacceptWaetTransactions()
{
    //  transactions aren't being broadcasted, don't let them into local mempool either
    if (!fBroadcastTransactions)
        return;
    std::map<int64_t, CWaetTx*> mapSorted;
    // Sort pending  transactions based on their initial  insertion order
    for (std::pair<const uint256, CWaetTx>& item : mapWaet) {
        const uint256& wtxid = item.first;
        CWaetTx& wtx = item.second;
        assert(wtx.GetHash() == wtxid);
        int nDepth = GetTxDepthInMainChain(wtx);
        if (!wtx.IsCoinBase() && (nDepth == 0 && !wtx.isAbandoned())) {
            mapSorted.insert(std::make_pair(wtx.nOrderPos, &wtx));
        }
    }
    // Try to add  transactions to memory pool
    for (const std::pair<const int64_t, CWaetTx*>& item : mapSorted) {
        CWaetTx& wtx = *(item.second);
        std::string unused_err_string;
        SubmitTxMemoryPoolAndRelay(wtx, unused_err_string, false);
    }
}
bool CWaet::SubmitTxMemoryPoolAndRelay(CWaetTx& wtx, std::string& err_string, bool relay) const
{
    AssertLockHeld(cs_);
    // Can't relay if  is not broadcasting
    if (!GetBroadcastTransactions()) return false;
    // Don't relay abandoned transactions
    if (wtx.isAbandoned()) return false;