I have been frustrated by the options out there for project management. I am thinking of using drupal to emulate some of the features you see out there in basecamp and similar products.
Our basic needs is setting up clients, projects, and communicating back and forth on projects.
With CCK and Views I can already to a lot. I would set up a project content type, client content type, allow for node reference between the two. I might set up an extra layer that would be a task or issue that references projects. Say you have a project and it's ongoing and you might open up a task that is an upgrade feature. So that would attach to a project which is attached to a client.
Drupal of course has files/images built in. You can customize the fields for each content type. The tracker helps you keep track of communication. Forums can be used for communication. Built-in contact forms can be used.
For access control I would probably start off simple and just only have closed access to employees. Later on though I might add a layer of access where you could give the client access to their tasks that you mark as public..that can wait though.
I would use the event module to add start/end dates to tasks. I'm not a huge fan of the drupal built-in calendar but it would probably work for that.