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 
ForEachAddrBookEntry([&result, &filter](const CTxDestination& dest, const stdstring& label, const stdstring& purpose, bool is_change) {
        // Filter by change
        if (filter.ignore_change && is_change) return;
        // Filter by label
        if (filter.m_op_label && *filter.m_op_label != label) return;
        // All good
        result.emplace_back(dest);
    });
    return result;
}
stdset<stdstring> CWalletListAddrBookLabels(const stdstring& purpose) const
{
    AssertLockHeld(cs_);
    stdset<stdstring> label_set;
    ForEachAddrBookEntry([&](const CTxDestination& _dest, const stdstring& _label,
                             const stdstring& _purpose, bool _is_change) {
        if (_is_change) return;
        if (purpose.empty() || _purpose == purpose) {
            label_set.insert(_label);
        }
    });
    return label_set;
}
utilResult<CTxDestination> ReserveDestinationGetReservedDestination(bool internal)
{
    m_spk_man = p->GetScriptPubKeyMan(type, internal);
    if (!m_spk_man) {
        return utilError{strprintf(_("Error No %s addresses available."), FormatOutputType(type))};
    }
    if (nIndex == -1) {