For legacy blocks, the block id can't be verified until the action_mroot (merkle root of action receipts) is calculated which requires applying the transactions. For Savanna blocks the action_mroot is the finality_mroot (merkle root of the finality tree) which is known before applying the transactions.
For savanna blocks, verify the block id as part of block header validation.