Enter Pulp; A powerful repository management project from the fine folks over at Red Hat to help take some of the tedium out of the repository management process. In a similar vein to mrepo or cobbler, pulp allows you to mirror the yum repositories you rely on. You create local copies of CentOS, Fedora, EPEL, ElRepo, whatever you need to get the job done. No big deal, right? But that's the easy stuff. Pulp allows you to create clones of repositories, so that you can freeze it at a specific point in time. Very handy for keeping a live repository mirror, but also keeping production in a known good state. Now, you might be thinking to yourself that you've just managed to double the size of your mirror with this but you'd be wrong. This is where pulp shines. The rpms are dealt with individually, and linked to the appropriate repository. This means that unless the package changes, the only thing you're doing is copying a link. Clones have almost no storage penalty but allow you tremendous flexibility. This means you can track CentOS or EPEL releases and push updates out on a maintenance you decide, after you've had the time to test and validate them.
You can also take packages FROM a repository, and inject it directly into another one. Only need a couple of packages from epel? Why add the entire repository and jump through a convoluted set of include/exclude statements? Just inject the packages you need directly into your distribution repository! Pulp will sort out the dependencies and pull them in for you, which saves you the hassle of iterative testing to figure out what you need.
Pulp is currently under heavy development, so you should test it first to determine if it works for your environment. The Pulp team is very close to their v2 release which promises a load of new features, including rumors of puppet rule syncing. It's got a vibrant community and a very outgoing development staff who can be found on freenode in #pulp if you want to chat. They're quite open to new ideas and willing to help.