The problem is that it's trying to use my key (M) to authenticate in S when it's supposed to use J's key. I cannot specify the key to use with IdentityFile give it's on J and not on my machine.
Bem, esse é o seu problema. A conexão com o host de salto e o destino final é iniciada diretamente do seu cliente nesta configuração. Seu cliente deve ter a chave correta para ambos os sistemas.
O ssh jump -W %h:%p
no comando proxy inicia uma sessão ssh no seu host de salto, mas não cria um shell, apenas cria um túnel diretamente para o host de destino. Então seu cliente faz um ssh para o túnel. Em nenhum momento é iniciado um shell no host de salto que permite que você acesse quaisquer chaves armazenadas nesse host intermediário nesse tipo de configuração. Brincando com o encaminhamento não faz nada. Nenhum encaminhamento é usado para iniciar a conexão.