I'm not sure, but I guess you'll have problems with such setup. What if two nodes at the same time try to send, then fail, then both switch do different baudrate, then again try to send, then fail, etc? You could also listen for a while at startup, but what if two or more nodes listen for the same amount of time and then at the same time decide that they are alone and start sending at their own baudrates. Though, maybe you will find a way to make them talking at the same baudrate after few iterations of listen-send-failure, I'm not sure.
Few years ago Daniel Lundin suggested on the forums using timer pin to determine CAN baudrate. This should help determining shortest bit time (presence of 250kbps nodes?), but I guess you don't have timer pin connected to CAN RX.
Regarding CAN*XERR counters. It is not clear how are you going to use them, but instead of reading error counters, you may set up RSTATEx and TSTATEx bits to set CSCIF flag when error status changes. You need to service (clear) CSCIF each time, else you won't notice any changes in status bits TSTATx and RSTATx.
How and when errors counters get incremented or decremented is specified in Bosch CAN specs:
hhttp://www.freescale.com/files/microcontrollers/doc/data_sheet/BCANPSV2.pdf