It seems that it would otherwise silently skip the rescan for pre-backup used keys that are still waiting to be generated into the keypool?

See also #11249 
for (const utilSettingsValue& value  setting_value.getValues()) {
        if (!value.isStr() || value.get_str() != _name) new_value.push_back(val
    }
    if (new_value.size() == setting_value.size()) return true;
    return chain.updateRwSetting("", new_val
}
static void UpdateWalletSetting(interfacesChain& chain,
                                const stdstring& _name,
                                stdoptional<bool> load_on_startup,
                                stdvector<bilingual_str>& warnings)
{
    if (!load_on_startup) return;
    if (load_on_startup.value() && !AddWalletSetting(chain, _name)) {
        warnings.emplace_back(Untranslated("Wallet load on startup setting could not be updated, so  may not be loaded next node startup."));
    } else if (!load_on_startup.value() && !RemoveWalletSetting(chain, _name)) {
        warnings.emplace_back(Untranslated("Wallet load on startup setting could not be updated, so  may still be loaded next node startup."));
    }
}
/**
 * Refresh mempool status so th is in an internally consistent state and
 * immediately knows the transaction's status Whether it can be considered
 * trusted and is eligible to be abandoned ...
 */
static void RefreshMempoolStatus(CWalletTx& tx, interfacesChain& chain)
{
    if (chain.isInMempool(tx.GetHash())) {
        tx.m_state = TxStateInMempool();
    } else if (tx.state<TxStateInMempool>()) {
        tx.m_state = TxStateInactive();
    }