Vecs may need to move their contents when they reallocate to grow, as one example.
std:mem::swap (and friends) is an example where some values will get moved without the owners giving up their borrowed objects.
And this is also very salient: remember that rustc must prove that safe code cannot trigger UB. "I can't think of why someone would..." isn't good enough.