Yes, glad you figured out the answer, which is to use the function "overlap" in case you expect a real-valued overlap or the function "overlapC" if you expect a complex-valued output.
It's an interesting idea to define * to do overlap between MPS. We'll think about it. But one issue is simply a C++ issue, which is that function calls can only return a single type, so it would have to be a complex number to work in general. We could have psi * phi, where psi and phi are two MPS, result in a scalar ITensor though, which can be either real or complex.
Best regards,
Miles