Obviously a tight, or minimal set, is ideal. That's what we aim for. But as the docs note, the output is not guaranteed to be stable.
In particular, software changes over time may alter the precise set of cells you get back, in any scenario. This gives us the option of trading precision for performance, or trading off different kinds of precision. Very hypothetically, if we found a way to make things 10x faster but it would include 1% more cells, we at least want the API freedom to do that.
Also, even if you had exactly the set of cells at level L for which S2Region::MayIntersect is true, that method can certainly return true when it's more convenient to say yes than figure out an exact answer. The S2Regions mostly do a good job here, e.g. S2Polygon::MayIntersect is quite precise, but this can in general drag in more cells by itself.