sarà comico eppure proprio pochi secondi dopo aver inviato la discussione mi si è accesa la lampadina e ho capito il motivo. lo scrivo e lo lascio ai posteri:
praticamente è a causa di questo(ho evidenziato in rosso)
codice:
function movement(f, start, int, end){
               //con un valore a start maggiore di zero il setInterval può cominciare con un piccolo ritardo, volendo.
		setTimeout(iteration, start);            
		function iteration() {
		interval = setInterval(f, int); 	
              //se passo anche l'argomento end facio in mod che l'animazione termini
		if(end) setTimeout( function(){clearInterval(interval)}, end);
	}
}
la funzione interval così definita è una funzione globale ed è chiaro che viene occupata da uno solo dei due movimenti: il primo che la chiama quello si aggiudica il clearinterval.
la soluzione? semplicemente un var prima di quell' "interval".