Rebase is more or less stashing and removing all local commits, upgrading the underlying branch to current, then re-applying the local commits. This changes the commit hashes for any re-applied commit that lands on a change to the underlying branch, meaning that old commit hashes can be invalid afterward.
(This is also why force-pushing causes problems, since this is only visible in a local tree *unless* force-pushed upstream, meaning now those changed/deleted commits affect anyone else who has checked out that upstream branch. The normal process of upstreaming commits can't expose local changes like that, since it all goes upstream as a group and becomes a permanent part of the branch's history. Unless someone force-pushes the branch afterward, forcibly overwriting that history with a different one and leaving anyoneelse who'd checked out the branch with dangling commits that no longer exist.)
Here, CI is making a copy of someone's branch and testing each commit in turn to ensure consistency between multiple branches that touch the same code, whose commits may end up interleaved. If the branch is rebased or force-pushed during that testing, intermediate commits may become invalid as above and CI would need to start over with a new list of commits.