Casting a negative value??

Well, on the Arduino, an "int" is a 16 bit signed, as is an unqualified "short", so "signed short int" is somewhat redundant.

You could try:

byte var1, var2;
  int var3;
  var1 = 0xab;
  var2 = 0xcd;
  var3 =  ((int)var1 << 8) | (0xff & (int)var2) ;

Have you printed the values back from the Roomba?