I used SoftWareSerial (ss) in a project with FastLED. SoftWareSerial was used in conjunction with a Bluetooth module. My "trick" was to look for ss.available every time through loop(). If a character was available I would stop calling show() and go off to a function that read in the rest of the serial data, parsed and acted on the data before giving control back to loop() and the show() function. The first character that was received was only to trigger the serial function and was discarded. Yes, the animation was suspended during the serial function, but that was the only way to make it work.