I believe that the setBestChain-signal should be triggered After we sync the txs. I tested in regtest, if we write the chainstate, trigger setBestChain, and then crash before syncing the txs, we dont rescan them. The same test after this patch showed "Rescanning..." in the log file.
Looking at old code this was always the case, but has been changed due to refactorings. Also after this patch, the signal is not triggered for disconnectTip(..) anymore. I think it doesnt make much sense to trigger there, wasnt the case in old code either.