Em ambos os casos, $@ é expandido pelo seu shell atual, antes de executar find , porque ele está em uma sequência de aspas duplas. Estou supondo que você tenha $1 definido como 1 (execute printf "%s\n" "$@" para ver os valores atuais dos parâmetros posicionais).
Para executar suas experiências como você espera, você deve usar aspas simples ao redor do comando e aspas duplas em torno de $@ (para evitar divisão extra); por exemplo:
find . -exec sh -c 'ls -l "$@"' sh {} \;