Eu acho que o que você realmente quer é algo assim:
% zmv '(**/)(*).erb' '$1/$2.haml'
# ^$1 ^$2
Você precisa usar os parênteses para criar grupos de correspondências e criar um grupo de correspondências para o caminho para o arquivo e, em seguida, um grupo de correspondências para o nome do arquivo. Além disso, você precisa certificar-se de que o segundo argumento também esteja entre aspas simples para zmv.
Além disso, é realmente uma boa idéia testar comandos zmv com '-n' antes de executá-los (-n dirá o que será renomeado, mas não renomeia nada.)