Immutable message transmission has no way to say "I already know about this message; don't send it again."
Most of the good characteristics of Erlang that you describe are achievable in other languages.
So what I'm asking is, by what concrete mechanism does immutable message passing outperform cache coherence?
We can always drop down to C or asm to make ultra-shared data structures with minimal overhead. We could always do that. But people end up wanting to spend their precious lives making a difference in the world and not checking the return value of malloc thirty times per day.