I built a test using just a single can packet to test the decoding and just couldn't get there with bit shifting. I put together the code below to read the specific bits out of the packet and then write those bits into long value for each can bit. I then wrote those to another long value to the specific bit that I wanted. So canbit 28 goes to bit 0 of my RPM value, 29 to 1, 30 to 2, etc. The resulting number for RPM was then 672, which matched my manual conversion of the packet, I then added the factor of 2, and got the expected 1344 rpm. This is probably a terrible way of doing it, but it's the best I could come up with. I have a lot of serial prints in there for testing it out along the way. Now I will test it out by adding in the can commands and remove all the serial prints. I can play back a log file from another device to the can shield to simulate and see if I am on the right track.
Serial.begin(115200);
while(!Serial);
unsigned char data [8] = {0xC0, 0x00, 0x7D, 0x03, 0x2A, 0x00, 0x00, 0x00};
//unsigned long RPM
unsigned long canbit28;
unsigned long canbit29;
unsigned long canbit30;
unsigned long canbit31;
unsigned long canbit32;
unsigned long canbit33;
unsigned long canbit34;
unsigned long canbit35;
unsigned long canbit36;
unsigned long canbit37;
unsigned long canbit38;
unsigned long canbit39;
unsigned long canbit40;
unsigned long RPM = 0x0000000000000;
unsigned long factor = 2;
canbit28 = bitRead(data[3],4);
Serial.println(canbit28, BIN);
bitWrite(RPM,0,canbit28);
canbit29 = bitRead(data[3],5);
Serial.println(canbit29, BIN);
bitWrite(RPM,1,canbit29);
canbit30 = bitRead(data[3],6);
Serial.println(canbit30, BIN);
bitWrite(RPM,2,canbit30);
canbit31 = bitRead(data[3],7);
Serial.println(canbit31, BIN);
bitWrite(RPM,3,canbit31);
canbit32 = bitRead(data[4],0);
Serial.println(canbit32, BIN);
bitWrite(RPM,4,canbit32);
canbit33 = bitRead(data[4],1);
Serial.println(canbit33, BIN);
bitWrite(RPM,5,canbit33);
canbit34 = bitRead(data[4],2);
Serial.println(canbit34, BIN);
bitWrite(RPM,6,canbit34);
canbit35 = bitRead(data[4],3);
Serial.println(canbit35, BIN);
bitWrite(RPM,7,canbit35);
canbit36 = bitRead(data[4],4);
Serial.println(canbit36, BIN);
bitWrite(RPM,8,canbit36);
canbit37 = bitRead(data[4],5);
Serial.println(canbit37, BIN);
bitWrite(RPM,9,canbit37);
canbit38 = bitRead(data[4],6);
Serial.println(canbit38, BIN);
bitWrite(RPM,10,canbit38);
canbit39 = bitRead(data[4],7);
Serial.println(canbit39, BIN);
bitWrite(RPM,11,canbit39);
canbit40 = bitRead(data[5],0);
Serial.println(canbit40, BIN);
bitWrite(RPM,12,canbit40);
Serial.println(RPM, BIN);
Serial.println(RPM);
unsigned long RPMC = RPM * factor;
Serial.println(RPMC);