Você explicou a situação muito bem. A peça final do quebra-cabeça é que unzip pode lidar com curingas em si:
ARGUMENTS
file[.zip]
...
Wildcard expressions are similar to those supported in commonly used Unix shells (sh, ksh, csh) and may contain:
* matches a sequence of 0 or more characters
Ao citar o caractere curinga *, você impediu que o shell fosse expandido, para que unzip veja o caractere curinga e lide com a expansão dele de acordo com sua própria lógica.
rm , por outro lado, não suporta curingas por si próprio , portanto, tentar citar um caractere curinga instruirá rm a procurar um asterisco literal no nome do arquivo.
O motivo pelo qual unzip *.zip não funciona é que a sintaxe do unzip simplesmente não permite vários arquivos zip; se houver vários parâmetros, ele espera que o segundo e os subsequentes sejam arquivos no archive:
unzip [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] file[.zip] [file(s) ...] [-x xfile(s) ...] [-d exdir]