Communities is pretty much a self contained product used for managing external parties and providing collaboration through Chatter and the like. Customer portal was primarily a mechanism for exposing data to your customers with authentication, Parter Portal was aimed at data related to partners who might be collaborating on opportunities etc.
Although sites could leverage the login mechanism of customer portal (and I guess now Communities) they are a more general way of exposing VisualForce pages to the world as opposed to pre-built native functionality. Sites can expose pages without any authentication, and are generally the better option if you need to build a bespoke interface. Our website (www.spkeasey.com) is an example of using sites in this manner, it's all built in Visualforce.
This quesiton is somewhat open ended, but I think it has merit as it does affect Salesforce developers and admins, as such I've marked this question and answer as community wiki.
If you want to share data with your partners then Communities is now the way to go as Partner Portal has been retired as of the Summer '13 Release:
Starting in Summer ’13, the partner portal is no longer available for organizations that aren’t currently using it. Existing organizations continue to have full access. If you don’t have a partner portal, but want to easily share records and information with your partners, try Communities.
Existing organizations using partner portals may continue to use their partner portals or transition to Communities. Contact your Salesforce Account Executive for more information.