What happens in detail, when Bitcoin Core verifies a block during synchronization? Since version 0.10.x, block headers are acquired separately, and therefore download is not delayed until previous blocks have been verified.

Previous questions about synchronization mention that the verification takes the most time: How does Bitcoin Core verify each block? I assume it checks each transaction's script, the merkle tree, and finally the blockhash, but how does that go in detail?
Paraphrasing from the Protocol description on the Bitcoin-Wiki:

The following checks are performed on the block:


syntax for correctness
is not a duplicate
has at least one transaction
hash satisfies difficulty statement (nBits)
timestamp is not more than two hours in the future
first transaction is a Coinbase transaction, no other transactions are.
Transactions adhere rules


has inputs and outputs
tx is smaller than MAX_BLOCK_SIZE
each output and the total are between 0 and 21,000,000 bitcoin.

Coinbase's scriptSig length must be 2-100
Reject if sum of transaction sig opcounts > MAX_BLOCK_SIGOPS
Verify Merkle hash of the transactions
Check if previous block is in main chain
difficulty statement (nBits) matches difficulty rules
timestamp is not older than median of 11 previous blocks