Evidentemente ci mette piu' di 50 millisecondi ad eseguirsi....

Ma se proprio sicuro che non volessi scrivere setTimeout al posto di setInterval ? magari con qualche controllino che verifichi il termine dell'operazione... (non ho approfondito il problema)

Comunque fatto cosi' tu richiami fade() un'infinita' di volte in tempi ridottissimi ed in concorrenza con le volte precedenti che hai attivato la setInterval