Negative instantaneous frequency with hilbert transform using scipy hilbert
It looks like artifacts due to the derivative. I used this code in Octave:
fs=300;
t=[0:1/fs:2];
c=chirp(t, 20, 2, 100);
s=c.*(1+0.5*cos(2*pi*10*t));
h=hilbert(s);
m=abs(h);
a=diff(unwrap(arg(h)))/2/pi*fs;
plot(m,&quot;&quot;,a)

and this is what comes out:

I also tested the equivalent of this in LTspice and, without any form of unwrapping, this is the result:

where V(mag) is the result of hypot() (m), V(signal) is s, V(freq) is the frequency for the FM, and V(demod) is a. All are delayed (for matching I/O) by 23/2/200 which represents the order of the Hilbert transformer (Hamming window), divided by two (group delay) and by the sampling frequency (200).
My guess: don't take for granted the result of the differentiator and try to take a finer comb to it (is this a pun? not intended).