Hi!
What platform are you using? AVR being 8bitters, the behavior of types, and of certain Mozzi class will be different compared to 32bitters like the RP2040 for instance.
What is the type aSmoothIntensity is working on? Aka, what is fm_intensity? Where I am getting at is that it might be that updateAudio is a bit too heavy and cannot be run fast enough to keep the AudioRate even though it does not seem like it at first glance.
Another possible culprit could be the filter. FM generates quite weird harmonics which can badly interact with the filter if the resonance is too high. What are your filter parameters (resonance, and cutoff)?
Also, you can let Mozzi do the correct end shift if you know how many bits you have in what you return by using MonoOutput::fromNBit(N, output*gate); (this should not change anything, but that make things portable to other platforms if needed).
Best,
Tom