Every time I tried to make the output more unambiguous, I ended up with a more complex output that still at times proved ambiguous in practice. For example, if you decide to render strings in a special way, then what about strings contained in a collection? What about strings contained in some custom type? And what about strings containing quotes? In the end I decided to start out simple and see how it goes. If one keeps in mind that power asserts just print a (Groovy) string representation of the values, it's not too difficult to make sense of outputs like the one above (and refine the assertion).
Printing the values' types is an interesting idea, but would add a lot of noise for unambiguous cases (which are far more frequent). We could try to be clever and only add type information for equality comparisons where the string representations of both sides are identical, but that's beyond the scope of the current power assert implementation.
The most frequent ambiguity that I've seen in practice is string vs. number (like above). So maybe we should finally try to introduce literal syntax here and there, possibly also for collections (since Groovy already supports it). More opinions are welcome.