Although if a checkpoint has already received >2/3 votes in the first round and is justified, we can't be sure that it would be included in the canonical chain because although reorganization is unlikely at this phase, it's still possible, and all that takes is either a large network delay or attack on the network.
Because of this, a finalized phase is necessary because the probability that a finalized block to be reorganized is extremely unlikely, as it requires >2/3 of validators to finalize a competing chain. Reorganizing a finalized block also requires at least 1/3 of the total staked ether to be slashed, which is always expected to cost the attacker millions of ETH.
So a finalized epoch is a really really justified epoch, in essence, with one key difference - when things are justified, you can still rewind time to go to that point. When you finalize, it becomes incredibly difficult to rewrite history.
See:
https://blog.ethereum.org/2021/11/29/how-the-merge-impacts-app-layer
https://our.status.im/two-point-oh-justification-and-finalization/