I'm not too familiar with CruiseControl, but many of these manual tasks can be automated within a CI tool. I've used Hudson in the past, but I suspect CruiseControl will do it just fine.
If you work from trunk, create a "Promote build to QA" and a "Deploy to internal group" job, possibly with some sort of audit information. This might call out to a Maven, Capistrano, or Fabric script (depending on your environment) to do the deed. This doesn't require any special work - just a job that calls a shell script, possibly with some variables.
If you work in feature branches, you'll need to create a "Promote build to QA" or "Deploy to internal group" action on the builds being built against your feature branch. This might require you to make a plugin for your CI system. You might be able to use a job like above, but the job runner will need variables (like branch name or build number).
I'm not sure what you mean by tracking releases, but I've used two methods with CI tools in the past to keep track of when releases have gone out. The first is making the release a Hudson job, which means you get a history of job runs (with output). You can associate useful version data to the build in Hudson, so you can see at a glance which builds went out when. The second is using a callback in your deployment process. When the deployment is complete (or even if not), make a callback to your CI tool (or some other release tracker) that reports on the result (in Hudson, using either an external process monitor, or by triggering a build remotely).
Hope that helps.