No, no es raro. Pasa que en esa llamada no estás usando argumentos variables, estás usando un único argumento de tipo string, y como lo entrecomillás, la sintaxis es correcta. En el otro caso, el problema es el uso de comillas, ya que cuando el primer argumento de setTimeout es una cadena, setTimeout la evalúa como si estuviera dentro de la función eval.
Para que te funcionara, en lugar de esto:
Código PHP:
setTimeout("aumentaAlturaCapa(capa,altura)",2000);
Tendrías que usar esto otro:
Código PHP:
setTimeout("aumentaAlturaCapa(document.getElementById('"+capa.id+"'),"+altura+")",2000);
Pero es un poco más eficiente usar una función anónima.