Are there real tangible differences or is it just a matter of taste?
Team city doesn't have PHP support so its not interesting for me. I think this is a personal choice.
Personal choice, but TeamCity is very pleasant to install and to look at.
TeamCity's pre-tested or delayed commit can be a nice feature depending on your specific needs.
Getting cruise control setup and maintained takes more time than TeamCity (where you can setup automated project (sln) build in matter of minutes). TeamCity also has a couple of very nice features, such as reporting build failure (via email, jabber, web site) immediately, so you don't have to wait for x minutes.
Version 4 (currently EAP) also has a feature that runs failed tests first, so you know if you fixed the build quickly.
So... my vote goes for teamcity, unless your team is so big you have to pay for it... In that case, I don't know.
There's a comparison of TeamCity to CruiseControl and CruiseControl.NET on the TeamCity website at http://www.jetbrains.com/teamcity/documentation/featureMatrix.html. It's obviously going to be a bit skewed in favor of TeamCity, but thought it might help anyway.
For me, I had to go with CruiseControl.NET because it supports SourceGear Vault and TeamCity does not.
I personally am on CC.NET due to the fact that I can customize the heck out of it, we use it for all sorts of things like running Red Stone's EggPlant, Producing Localization Reports, Running UnitTests in many different frameworks and on the 3 OS's using MONO. I really found it easy to set up and was up in less than 5 minutes just doing a simple compile of a single solution. However, I have checked out Team City and it looks cool, I just need the ability to customize.