I would be a little concerned about the amount of free memory, especially since your receive buffer is on the stack. Search the forum for "free memory function" and you'll find some code that will tell you how much RAM is free. If it's less than 200 you might be seeing a stack overflow.
I also wonder whether setting the rx_pin before calling vw_setup might help:
// instead of this:
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000);// Bits per sec
vw_set_rx_pin(receivePin);
vw_rx_start();// Start the receiver PLL running
// is this any better:
vw_set_rx_pin(receivePin);
vw_setup(2000);// Bits per sec
vw_rx_start();// Start the receiver PLL running
Edit: Also, unless you have a devious plan that requires using int values instead of char or byte, you could save 100 bytes of RAM right away by switching to char if the values in this array will never exceed 255:
int scrollingLetterKeys[maxScrollingLetterKeys];
-br