Parece haver um bug com variáveis de ambiente aninhadas no Windows 7 (talvez outras versões também, não tenho certeza) onde, se o nome da variável de nível superior vier antes do nome da variável aninhada em ordem alfabética, ela ganhou ' t ser expandido.
No seu caso, a variável de nível superior M2 vem antes da variável aninhada M2_HOME quando classificada em ordem alfabética. Se você alterar M2 para algo que vem depois de M2_HOME (por exemplo, M3 ), verá que ele funciona conforme o esperado.