Bueno, no es que ash no se anime sino que lo hace a un ritmo muy diferente. La verdad es que el código está bastante desordenado y usar 2 setIntervals no es que no funcione sino que no tiene sentido y además afecta el rendimiento. Lo normal es usar un sólo temporizador que invoque a una única función dibujar. Tampoco tiene sentido obtener el contexto en cada invocación. En resumen, mi sugerencia es que reorganices un poco todo tu código. También que leas este artículo, que muestra muy claramente cómo crear un juego en canvas:
http://billmill.org/static/canvastutorial/