I located the FastLED code that would be used for your ATMEGA328P - it is in clockless_trinket.h (with a name like that, who would have guessed?). No real surprise to find that it uses "bitbanging".
For WS2812B LEDs, "0" or "1" bits are represented by different length pulses, that have to be transmitted at a rate of 800k bits per second. Conceptually, you would bitbang a single bit like this:
bit = next_bit_to_transmit;
if ( bit == 0 )
{
bittime = 375; // duration of "0" bit
}
else
{
bittime = 875; // duration of "1" bit
}
digitalWrite(Led_Pin,HIGH); // start of bit pulse
delayNanoseconds(bittime); // duration of bit pulse
digitalWrite(Led_Pin,LOW); // end of bit pulse
delayNanoseconds(1250-bittime); // up to next bit slot (1250ns for 800k bit per second LED)
You would have to repeat that 24 times (8 bits each for three colours) for each LED in the string. After the data for all the LEDs has been transmitted, there has to be a "gap" (absence of pulses), for at least 50μs (not all the datasheets agree on the exact figure), which causes the LEDs to latch and use the data received.
Maybe that looks easy? The WS2812B LEDs require sub-microsecond pulse timing, hence the use of nanoseconds above. I don't think you mentioned it, but I would guess that your processor is running at 16MHz, or perhaps 20MHz, meaning it has a cycle time of 62.5ns or 50ns. Some machine instructions take only one clock cycle, others take two or three, and the code as shown there has to be achieved using at most 20 or 25 single-cycle machine instructions. That means digitalWrite() is far too slow to use like that, and unfortunately there is actually no delayNanoseconds() for you to use. To get down to those sort of timings as required there you have to be aware of and control the exact sequence of machine instructions used.
You may struggle to even find the code that does that in clockless_trinket.h (I know I did, in the end I compiled FastLED and then disassembled the result).
Some types of pixel LEDs have clock and data lines, with the clock being provided by the controller. In that situation, it may be possible to slow down or even freeze the clock for a while, but with the WS2812B, there is no clock line, and the timing is determined by the LEDs. There is some tolerance, but you cannot slow the transmission down by much. Once you start the transmission, you have to keep going until the data for all the LEDs has been sent, so interrupts have to be disabled for all that time.
I still think it might be possible to bitbang the LED pulses and at the same time capture DMX data. However, if you can afford to turn a blind eye (deaf ear?) to DMX for 5ms, then you don't need to do that or worry about what is going on in FastLED.
I took your code as given a few days ago, with the DMX ISR. I changed the number of LEDs to 150 (just because I happen to have a 150-LED strip), and added code to the startup() to fill the LED array with a repeated 7 colour rainbow. I had to get rid of the normal ISR to stop it from complaining about there being multiple definitions for the ISR - I guess you had to do something similar. Also made loop() call FastLED.show( ) every time through. I loaded it into a 16MHz Arduino Nano board that I happen to have lying around here. On running that, I get a non-flicking rainbow down the strip.
I don't have anything to hand to generate valid DMX data, but I realised that it is easy to get the ISR to be entered, by just periodically generating a 4μs pretend start bit. So that I could be 100% sure that the ISR was actually being called, I added code at the start of the ISR to toggle one of the pins.
The image shows the result. The top trace is the LED output data, a continuous burst for 4.5ms, as expected for 150 LEDs. The bottom trace is the pin toggled on entry to the ISR (the 4μs "start bits" were 200μs apart). So, you can see that the ISR does get called, but that activity stops while the LED transmission is happening, due to interrupts being disabled for all that time. What you can't see there, is that the LED strip was not flickering at all - still rock steady.
If you can't replicate that, then your DMX processing must be messing something up, or maybe you do have a wiring problem (I can easily get the LEDs to flicker by messing with the ground connection to them).