A questão está ao contrário.
Você não procura um motivo para tornar uma função não pública. É uma mentalidade incorreta para começar (na minha opinião). O raciocínio deve seguir o contrário.
Em outras palavras - não pergunte "por que eu o tornaria privado?". Pergunte: "por que eu a tornaria pública?"
Em caso de dúvida, não exponha. É como a navalha de Ockham - não multiplique entidades além da necessidade.
EDIT: Abordando contra-argumentos apresentados por @Telastyn nos comentários (para evitar discussões prolongadas):
Eu ouvi isso ao longo do tempo, e até o defendi por algum tempo, mas, na minha experiência, as coisas tendem a ser muito particulares.
Sim, às vezes é difícil se uma classe é aberta para herança, mas você não pode substituir alguns métodos privados (cujo comportamento você gostaria de alterar).
Mas protected
seria suficiente - e ainda não é público.
Isso leva a muita duplicação de código e sobrecarga para acessar "coisas que não deveriam ser públicas", mas que são acessadas indiretamente de qualquer maneira.
Se isso se tornar problemático, simplesmente torne-o público! Existe a necessidade de que eu estava falando :)
Meu argumento é que você não deve fazê-lo por precaução (YAGNI e tudo).
Observe que é sempre mais fácil tornar pública uma função privada do que recolocá-la na privacidade. O último provavelmente quebra o código existente.