PIC understanding the sign of the integer that is in the register
Probably RXB0D0 and RXB0D1 are defined as unsigned char or uint8_t.

It should work as expected if you do an explicit type cast of the MSByte to a signed byte type:

current = (int8_t)RXB0D1;  

or

current = (signed char)RXB0D1;

You even don't need to use a separate variable. You could also do
if ((int8_t)RXB0D1 &lt; 0) {...}