SPI read error with MCP2515
Do you know if your MPPT or BMS are configured to send CAN messages periodically without first receiving some external request over CAN?

For example, I know of at least two popular solar car MPPTs that will only send CAN messages in response to corresponding CAN frame with the same ID and with the remote transmission request (RTR) bit set.

You can try to distinguish between a CAN bus where all of the other nodes are declining to send messages and a CAN bus that is non-functional by attempting to send a CAN message and checking if it is ACKed. You should be able to do this in software by checking if the message transmits successfully or in hardware by probing the non-differential CANRX pin on the TJA1050 and checking for the ACK bit using a logic analyzer.

If you don't have a logic analyzer, you can use a two channel oscilloscope to monitor CANRX and CANTX of the TJA1050. When the MCP2515 transmits a message, CANRX and CANTX will be identical if nobody ACKs your message. If someone does ACK the message, you should see a single dominant (low) bit on CANRX that is not present on CANTX.

You may also want to try swapping out your 100 ohm termination resistor for a 120 ohm termination resistor - all of the CAN devices I've used personally have used 120 ohm termination resistors. I don't expect there would be compatibility issues, but it's trivial to swap it to rule out the termination resistor as a potential source of error.