No primeiro exemplo, seu shell expandirá primeiro o *.c para corresponder a todos os arquivos no diretório atual que terminam em .c .
Portanto, se você tiver one.c , zwei.c e tres.c em seu diretório, seu shell expandirá isso para
find . -name one.c zwei.c tres.c
e find provavelmente ficarão confusos porque você está passando alguns argumentos extras depois que -name one.c - zwei.c e tres.c não são considerados parte do que você está pesquisando com -name .
No segundo exemplo, você está passando a string literal *.c para a opção -name de find . Isso é algo que o find sabe como lidar - e provavelmente o que você está procurando.
Uma maneira alternativa de realizar a mesma coisa seria com uma fuga de barra invertida:
find . -name \*.c
(Observe também que seus exemplos precisam de um argumento para informar find onde iniciar a pesquisa. Isso geralmente é apenas . para indicar o diretório atual.)