The duplicate block handling code in AcceptBlock needed to be updated for autoprune (see #5863 ), since we no longer HAVE_DATA for every block previously processed. This change significantly tightens requirements on which blocks we process, so that the only blocks we process are either ones we’ve requested (from a network peer or from disk), or are new blocks that also have more work than our tip.
I believe this is a somewhat substantial behavior change to now link network behavior (ie, whether we’ve requested a block) to block processing. If we adopt this change, I think it would be easier for us to reduce our reliance on checkpoints in the future.
[I had been discussing this with @sipa on irc in the context of #5863, but after implementing it I realized that it’s actually not tied to autoprune at all and makes more sense to evaluate on its own.]