Sending a double type value over CAN Bus
To avoid side-effects, a better way would be to use this statement

value_to_send = (short)((double)speed_calculated * (double)10.0);


Refer -> PromotionRules 

As to the second part of your question, you say 198 is the expected value. 
Which means, function_to_calculate_correction() must return 198(0xC6) .

I see no way how short to char conversion would lead 198 to be loaded as 98 in can_data_to_send[0] as 198 can be easily accommodated in a byte.

Also, if your scaling factor is 10, is double really required?