It looks like the 'lowpass' function is doing something unexpected, which causes this. In order to get the transfer function (tf) you are using a chirp input into lowpass and dividing ffts, and then of course doing the ifft to get the impulse response (ir) in the time domain.
If you zoom in on the resulting ir you will find that the 'tail' is actually a perfect time-reversed copy of the initial pulse. Since the fft assumes the functions are periodic, one can swap halves of the array with fftshift and go with a shifted time array that puts t=0 at the center. That is similar to what is often done in the frequency domain, and that is done here as well.
The first part of the code below takes the transfer function you got from chirp (and ignores the tf_estimate method). Plot 1 shows the tf and the resulting ir, expanded a bit with the use of xlim. Note that the tf is a symmetric real function, plus a very small imaginary part. I did not expect this at all. Since [symmetric and real] fourier transforms to [symmetric and real], the resulting ir is symmetric about t=0 and has a lot of extent into negative time. This means that the filter is not causal.
In the fine print for the documentation of lowpass, it says that it "compensates for the delay introduced by the filter" so I am guessing that they multiply the filter response by exp(i*w*tau) (or perhaps someting oscillatory but more complicated) in order to perform a time shift. I suppose they have their reasons, maybe good ones. But the bigger the company gets, and the more convenience functions and black boxes they introduce, the more opaque things become. That's just the way it is.
The second part of the code uses a simple lowpass butterworth filter as the tf. The frerquency response is similar to the lowpass filter you used, but I did not attempt a strict AB match. In this case the tf has as much imaginary part as it does real part, which allows the filter to be causal, and you only have an ir for t>=0.
You have an odd number of points, which is very good for accuracy in this calculation, but it does mean that fftshift and ifftshift are different functions so you have to be careful which one to use.
t = 0:1/48000:10;
fo = 1;
f1 = 24000;
x = chirp(t,fo,10,f1,'logarithmic');
x = x(:);
y = lowpass(x,1000,48000);
y = y(:);
in = fftshift(fft(x));
out = fftshift(fft(y));
tf = out./in;
ir1 = fftshift(ifft(ifftshift(tf)));
n = length(t);
fcen = 48000*(ceil(-n/2):ceil(n/2)-1)/n;
tcen = t - (t(1)+t(end))/2;
plot(tcen,ir1); grid on
n = 5;
f = 1000;
[zb,pb,kb] = butter(n,2*pi*f,'s');
[bb,ab] = zp2tf(zb,pb,kb);
[hb,wb] = freqs(bb,ab,fcen*2*pi);
ir2 = fftshift(ifft(ifftshift(hb)));
subplot(2,1,1); grid on
plot(tcen,ir2); grid on