That's because you put your array in PROGMEM but didn't tell the compiler to fetch the contents from PROGMEM.
When you use a constant, the compiler knows the address you put in your PROGMEM array and uses that address. When you use a variable, the compiler generates code to fetch the array entry. Since you are not telling it to call the function to fetch from PROGMEM, it fetches from RAM.
Try:
sendRAW_Flash(pgm_read_word(&CoolMode[CoolSetting]), signalLength, khz);