Consider it like this:
var enumerator = .GetEnumerator();
while(enumerator.MoveNext())
Ergo, when it calls GetEnumerator, you get back that result to the PeopleEnum. Every time the MoveNext method is called, the PeopleEnum's position increases by one, iterating over the list.
When the position has reached the end, the MoveNext call returns false, and the loop ends.