Existe uma diferença prática.
curl -sSL https://get.docker.com/ | sh inicia curl e sh ao mesmo tempo, conectando a saída de curl com a entrada de sh . curl será executado com o download (aproximadamente) tão rápido quanto sh pode executar o script. O servidor pode detectar as irregularidades no tempo e injetar código malicioso não visível quando simplesmente baixar o recurso em um arquivo ou buffer ou ao visualizá-lo em um navegador.
Em sh -c "$(curl -sSL https://get.docker.com/)" , curl é executado estritamente antes que o sh seja executado. Todo o conteúdo do recurso é baixado e passado para o seu shell antes que o sh seja iniciado. Seu shell só inicia sh quando curl saiu e passa o texto do recurso para ele. O servidor não pode detectar a sh call; só é iniciado depois que a conexão termina. É semelhante ao download do script em um arquivo primeiro.
(Isso pode não ser relevante no caso docker, mas pode ser um problema em geral e destaca uma diferença prática entre os dois comandos.)