As far as I can see, for every LED you set, you do a call of FastLED.show(). This updates the complete display. Maybe you can reduce these call by moving it after the loop.
e.g.:
void flashOnce() {
for (int i = 0; i < NUM_LEDS_PerGrp[groupSelector][0]; i++) {
leds[grp[groupSelector][i]] = CHSV(224, 255, 255);
}
FastLED.show();
delay(150);
modeSelector = currentGrpCondition[groupSelector][0];
ColourModeSwitch ();
}