Sorry, I don't have any knowledge on the CAN library. Make sure all the info you pass to the read function is correct.
CAN.readDATA_ff_0(&length,frame_data,&frame_id,&ext,&filter);
P.S. I just checked the value of data.length() and it has a value of 20 which is correct in this case.
You do a 'length = data.length();' on transmit side, does the length need to be known on the receiver side?
if frame_data is an array of chars, frame_data[0] will only output one character.
Hard to say as the code you left out is quite relevant it seems.