That's a very useful analysis, thanks!
CAN is really meant for distributed embedded systems where you are having to implement full blown communication between equally complex nodes.
CAN is indeed much more robust both at a physical layer with a differential line and at a transfer layer with all sorts of error detection and mitigation mechanisms.