#3370 introduced asynchronous processing for blocks, where reject messages and DoS scoring could be applied outside of ProcessBlock, because block validation may happen later.
However, some types of errors are still detected immediately (in particular, CheckBlock violations), which need acting after ProcessBlock returns.