They are quite different, with different purposes.
Epydoc is best if you want auto-generated API documentation. It is similar in spirit to Javadoc. Sphinx only does auto-generated if you push and pull it. A downside of Epydoc for Python is that, since it is auto-generated, it often documents too well; common tricks of importing symbols into higher-level modules don't work -- Epydoc will detect the submodule and document it that way instead. This created issues with documenting rospy.
Sphinx is best for handwritten documentation, and is probably much more popular. It is best for generating documentation that goes beyond just talking about the API and gets into usage, tutorials, etc... It is best if you want to create a family of pages and cross-reference/link them together. Most API documentation you see in Sphinx is probably handwritten (e.g. click 'Show source' on the official Python module docs). The advantage of handwritten is that you only have to document what you actually intend for people to use, and there are no issues with submodules being exposed if you don't want them to. Sphinx is also nice for writing man pages.
Doxygen is kind of a cross between Sphinx and Epydoc, though I think Doxygen puts auto-generated API documents first, then makes it possible to build up other pages.