The question is backwards.
You don't seek for a reason to make a function non-public. It is an incorrect mindset to start with (in my opinion). The reasoning should go the other way.
In other words - don't ask "why would I make it private?". Ask: "why would I make it public?"
When in doubt, don't expose it. It's kind of like Ockham's razor - don't multiply entitites beyond necessity.
EDIT: Addressing counterarguments brought up by @Telastyn in comments (to avoid extended discussion there):
I've heard that over time, and even espoused it for quite some time,
but in my experience, things tend to be too private.
Yes, it's a pain sometimes if a class is open for inheritance, but you can't override some private methods (whose behaviour you'd like to alter).
But protected
would suffice - and it's still non-public.
It leads to a lot
of code duplication and overhead to get at "things that shouldn't be
public" yet are accessed indirectly anyways.
If it becomes problematic, then simply make it public! There's the necessity I was talking about :)
My point is that you shouldn't do it just in case (YAGNI and all).
Note that it's always easier to make a private function public than pulling it back to privacy. The latter is likely to break existing code.