A execução de um script, dependendo da linha shebang, funciona de forma bem diferente de passá-lo como argumento para um shell.
No primeiro caso, o arquivo deve residir em uma partição executável e deve conter uma linha shebang válida para um shell existente.
No último caso, nada disso é necessário, já que a shell na qual você está chamando o script assume a responsabilidade por essas coisas.
Note que você não está usando o mesmo shell para esses testes: o primeiro infere bash, enquanto o segundo usa sh.
Meu palpite é que a partição em que seu script reside não permite a execução; mount -v
dirá se esse é o caso.