Off the top of my head, I'd say:
A Connection Pool is a database-specific implementation of the Broker
Pattern. Connection Pools also imply pools that grow or shrink depending on requirements, and have other functionality like making sure the Connections don't become broken or stale. It is designed to manage database Connection resources.
A DataSource is a distributed connection manager. It is designed to serve out out connections to a distributed application from a centralised source. In theory it would respond to connection requests by opening a new Connection and returning it, but in practice they tend to have a Connection Pool hiding behind the scenes as well.
I guess you could view a DataSource as a decorator for a Connection Pool. It decorates the Connection Pool with the ability to be distributed.
Dave