Because you are creating a new iteration over the collection every time in the first example. If you'd put some debug statements in, you would have noticed you were processing the same object every time (assuming the iteration always returned the objects in the same order).
As Joanne pointed out, your code creates a new iterator each time you call coll.iterator() and the iterator will point to the first element in the Collection. This means that coll.iterator().hasNext() will always be true if the Collection is not empty.