O argumento para -exec é tipicamente o material entre o -exec e o \;
Primeiro tento colocar um espaço entre o {}.contents e o \; , mas não testei para ver o que poderia estar acontecendo
para o seu outro ponto, é provavelmente mais fácil alterar o ponto de partida para find do que interferir na cláusula -exec . Sugiro algo como abaixo, lembrando que $OLDPWD é o diretório de trabalho antigo anterior ao último cd (pelo menos no bash, em tsch é $owd )
cd targetdirectory; find $OLDPWD -type f -name "*.zip" -exec unzip {} -d {}.contents /;
Você poderia embelezar adicionando um ; cd $OLDPWD no final para retornar ao seu ponto de partida se você quisesse