Another example when calling public method inside another public method is totally fine is an CanExecute/Execute approach. I use it when I need both validation and invariant preservation.
But in general I'm always cautious about that. If a method a() is called inside method b(), it means that method a() is an implementation detail of b(). Very often it indicates that they belong to different abstraction levels. And the fact that they both are public makes me wonder whether it's a Single-responsibility principleSingle-responsibility principle violation or not.