I think the "==" operator for such a complex object is difficult to evaluate correctly (i.e. intuitively correct).
You are basically testing each triangle of both surfaces and for each triangle all three points. However, your test fails if you have two essentially identical triangles and only the sequence of points does not match. Or, a similar case, if you have identical surfaces and the sequence of triangles doesn't match. You could obviously argue that two surfaces are not identical if their triangle-sequence does not match. But from a geometrical PoV that wouldn't matter, and for most applications I would argue that the surfaces could still be considered to be identical.

If you need this for your code I would suggest to put the identity test somewhere in the class where you need to know if two surfaces are identical in the sense that you test here (obviously implemented in a function and not as an operator).