Hi dkweiss,
Yes, that's correct. Based on your experience, though, and on that of the above post, Matt and I have decided that it's too confusing that the .real() method is allowed to work for tensors with complex storage. So we plan to deprecate that feature, and in the upcoming version 3 of ITensor, make it a requirement that you have to call .cplx() (or in version 3 it's called eltC) on tensors with complex storage, even if the element you're retrieving happens to have zero imaginary part.
For now, the best practice I'd recommend is to call .cplx().real() if you definitely just want the real part, and know it's ok to ignore the imaginary part.