It's not particular to iterators, though. In fact, it's this way with iterators because it's already this way with pointers. Comparing invalid pointers for equality is undefined.
And the reason for that is that there is, or might be, or has been, hardware which traps upon such reads.
There's simply no use in comparing invalid pointers, especially not to themselves, so what's the point in requiring it to have a defined result?