The difference is because the FFT interpolation assumes that the signal is periodic; it repeats outside the known values. The sinc() interpolation assumes that the signal is zero outside the known values (ringing in this case). You can make them closer by padding the signal with zeros before resample(), but it will never be exact.
Here’s the second issue regarding time-domain real signal interpolation, and it’s a big deal indeed. This exact interpolation algorithm provides correct results only if the original x(n) sequence is periodic within its full time interval.