How does hydra end up with hash mismatches?

I’m aware that hash mismatches usually would occur when upstreams force-push, republish a tarball, etc. However, assuming the path didn’t change (neither the hash nor the name), nix should not try to rebuild a fixed-output derivation that was already cached. And I am led to understand that old FODs in the cache are stored, not cleaned up.

So, how does this mismatch occur (frequently)?
Is this just a timing issue, meaning the FOD wasn’t even built by hydra yet, and therefore uncached?
But I feel I’ve encountered this even with older FODs that should’ve been built.