Внутри вашего переопределенного ProcessCmdKey как вы определяете, какая клавиша была нажата?
Значение keyData (второй параметр) будет меняться в зависимости от нажатой клавиши и любых клавиш-модификаторов, поэтому, например, нажатие стрелки влево вернет код 37, shift-left вернет 65573, ctrl-left 131109 и alt-left 262181.
Вы можете извлечь модификаторы и нажатую клавишу, используя ANDing с соответствующими значениями перечисления:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
bool shiftPressed = (keyData & Keys.Shift) != 0;
Keys unmodifiedKey = (keyData & Keys.KeyCode);
// rest of code goes here
}