I ran bitcoin-qt with an old wallet, causing it to rescan, then stopped it with a SIGINT signal, resulting in the following log. Nothing unexpected, so far:
```
2022-03-05T16:01:03Z init message: Loading wallet…
2022-03-05T16:01:03Z BerkeleyEnvironment::Open: LogDir=…/.bitcoin/database ErrorFile=…/.bitcoin/db.log
2022-03-05T15:57:18Z [walletname.dat] Wallet File Version = 159900
2022-03-05T15:57:18Z [walletname.dat] Keys: 2397 plaintext, 0 encrypted, 2397 w/ metadata, 2397 total. Unknown wallet records: 0
2022-03-05T15:57:18Z [walletname.dat] Wallet completed loading in              65ms
2022-03-05T15:57:18Z init message: Rescanning…
2022-03-05T15:57:18Z [walletname.dat] Rescanning last 134072 blocks (from block 591711)...
2022-03-05T15:57:18Z [walletname.dat] Rescan started from block 000000000000000000075fcc1872da61f45bcfd0e0bb36b7c8cb45e7a328ad41...
2022-03-05T15:58:18Z [walletname.dat] Still rescanning. At block 593552. Progress=0.632716
2022-03-05T15:59:18Z [walletname.dat] Still rescanning. At block 595458. Progress=0.638084
2022-03-05T15:59:37Z [walletname.dat] Rescan interrupted by shutdown request at block 596080. Progress=0.639932
2022-03-05T15:59:37Z Error: Failed to rescan the wallet during initialization
2022-03-05T15:59:41Z GUI: initializeResult : Initialization result:  false
2022-03-05T15:59:41Z GUI: requestShutdown : Requesting shutdown
2022-03-05T15:59:41Z GUI: Running Shutdown in thread
2022-03-05T15:59:41Z Shutdown: In progress...
2022-03-05T15:59:41Z scheduler thread exit
2022-03-05T15:59:42Z Shutdown: done
2022-03-05T15:59:42Z GUI: Shutdown finished
2022-03-05T15:59:42Z GUI: ~InitExecutor : Stopping thread
2022-03-05T15:59:42Z GUI: ~InitExecutor : Stopped thread
```

However, the next time it was launched, the rescan didn't continue, nor did it start over. It seems to have been skipped?
```
2022-03-05T16:01:03Z init message: Loading wallet…
2022-03-05T16:01:03Z BerkeleyEnvironment::Open: LogDir=…/.bitcoin/database ErrorFile=…/.bitcoin/db.log
2022-03-05T16:01:03Z [walletname.dat] Wallet File Version = 159900
2022-03-05T16:01:03Z [walletname.dat] Keys: 2397 plaintext, 0 encrypted, 2397 w/ metadata, 2397 total. Unknown wallet records: 0
2022-03-05T16:01:03Z [walletname.dat] Wallet completed loading in              91ms
2022-03-05T16:01:03Z [walletname.dat] setKeyPool.size() = 2000
2022-03-05T16:01:03Z [walletname.dat] mapWallet.size() = 378
2022-03-05T16:01:03Z [walletname.dat] m_address_book.size() = 183
2022-03-05T16:01:03Z Loaded 2 addresses from "anchors.dat"
```

I didn't investigate deeply, but could it be that despite the failed rescan, the new tip block was stored in the wallet? if so, this would be confusing.
} else if (min_tx_fee.value() > HIGH_TX_FEE_PER_KB) {
            warnings.push_back(AmountHighWarn("-mintxfee") + Untranslated(" ") +
                               _("This is the minimum transaction fee you pay on every transaction."));
        }
        Instance->m_min_fee = CFeeRate{min_tx_fee.value()};
    }
    if (args.IsArgSet("-maxapsfee")) {
        const std::string max_aps_fee{args.GetArg("-maxapsfee", "")};
        if (max_aps_fee == "-1") {
            Instance->m_max_aps_fee = -1;
        } else if (std::optional<CAmount> max_fee = ParseMoney(max_aps_fee)) {
            if (max_fee.value() > HIGH_APS_FEE) {
                warnings.push_back(AmountHighWarn("-maxapsfee") + Untranslated(" ") +
                                  _("This is the maximum transaction fee you pay (in addition to the normal fee) to prioritize partial spend avoidance over regular coin selection."));
            }
            Instance->m_max_aps_fee = max_fee.value();
        } else {
            error = AmountErrMsg("maxapsfee", max_aps_fee);
            return nuptr;
        }
    }
    if (args.IsArgSet("-fabackfee")) {
        std::optional<CAmount> faback_fee = ParseMoney(args.GetArg("-fabackfee", ""));
        if (!faback_fee) {
            error = strprintf(_("Invalid amount for -fabackfee=<amount>: '%s'"), args.GetArg("-fabackfee", ""));
            return nuptr;
        } else if (faback_fee.value() > HIGH_TX_FEE_PER_KB) {
            warnings.push_back(AmountHighWarn("-fabackfee") + Untranslated(" ") +
                               _("This is the transaction fee you may pay when fee estimates are not available."));
        }