We use CruiseControl.net, however your first requirement could be a bit of an issue. Could you explain how you make the choice as to which repository you pull the source from. CC.NET can work with either of those, or could work with both at the same time if you got a bit clever with the ccnet.config settings, but it's more down to how you know which one to pull from.
The rest of it is easy, I use NAnt to do the real work and its easily up to that.
edit:
NAnt hasn't been updated for some time, the development stopped when MSBuild was released. If you do a search on stackoverflow you will find quite a few "should I swap to MSBuild" type questions, personally we have a reasonable amound of knowledge in NAnt, it does what we want, and there are some things that we do that appear very hard in MSBuild so we will hang on for a while longer.
CruiseControl.NET has tasks that can call MSBuild directly, we still call DevEnv directly as we build a lot of deployment projects which is something that MSBuild has trouble doing.
Our NAnt script takes us all the way from pulling the right source out of ClearCase all the way to packaged product ready for shipping.
However, NAnt is just one option, if you are happy with another scripting language such as PowerShell then there is no reason why that shouldn't be used. CruiseControl.NET can call any executable as a task using the tags and passes a lot of information through using envirionment variables. This page: http://confluence.public.thoughtworks.org/display/CCNET/Executable+Task details what gets passed on.
In terms of using the same steps the only difference between the two setups would be the source control block in the ccnet.config file, our NAnt script doesn't change at all when we change the view being used as everything is relative and we hapen to have a standard layout for our views which means we know where everything is all of the time.
Hope that helps a bit more.
Alan.