In the first snippet, there are no overlapping borrows. Apart from the mutable reference that you store in m, every other borrow is temporary.
In the second snippet, you store an immutable borrow in m, and you use it after trying to push on the vector. In between, you are borrowing the vector mutably, exactly by trying to push to it. That creates an overlapping mutable and immutable borrow.
No, it doesn't say that. It says that the entire method call causes a mutable borrow of h, because Vec::push() has the signature fn push(&mut self, value: T).