A única diferença é que, com o Private, você não está permitindo que os proxies armazenem em cache os dados que os percorrem. No final, tudo se resume aos dados contidos nas páginas / arquivos que você está enviando.
Por exemplo, seu provedor de serviços de Internet pode ter um proxy invisível entre você e a Internet, que está armazenando em cache as páginas da Web para reduzir a quantidade de largura de banda necessária e reduzir os custos. Ao usar cache-control: private, você especifica que não deve armazenar em cache a página (mas permite que o usuário final faça isso). Se você usa cache-control: public, está dizendo que não há problema em todos armazenarem em cache a página e, portanto, o proxy manterá uma cópia.
Como regra geral, se é algo que todos podem acessar (por exemplo, o logotipo nesta página), controle de cache: público pode ser melhor, porque quanto mais pessoas o armazenam em cache, menor será a largura de banda. Se houver algo relacionado ao usuário conectado (por exemplo, o HTML nesta página inclui meu nome de usuário, portanto não será útil para ninguém) controle de cache: private será melhor, pois os proxies estariam armazenando dados em cache isso não será solicitado por outros usuários e eles também poderão manter os dados que você não deseja que sejam mantidos em servidores nos quais não confia.
E, é claro, tudo o que não é público deve ter um cache privado. Caso contrário, os dados poderão ser armazenados em um servidor proxy intermediário, se puderem ser acessados por qualquer pessoa com acesso a eles.