Making one trait implementation impose additional requirements on another is not new, we have Eq and PartialEq.
size_hint is useful for generic code that should work if the exact size is not known, but needs a reasonable estimate for e.g. reserving capacity in a collecting container.
As for 3, if the cost of calculating the size is not (amortized) constant, perhaps the iterator should not implement ExactSizeIterator at all. To take the opposite to extremes, any cloneable or bidirectional iterator might implement ExactSizeIterator, but the performance of generic code using that as a bound would be anyone’s guess.
However, one could reasonably design an algorithm that can compute an exact size in log(n) time but give a estimate a bound in constant time (restrict n <= c). Generic code that just needs a reasonable estimate for allocation could use the constant time method but code that absolutely needs to know an exact size could call len() to get an exact size. I don't know of any algorithms like this but I feel that needlessly restricting the API is a bad idea.
Essentially, I argue that this constraint should be removed because it serves no purpose and could restrict future APIs.