I think it really depends on the size of your team (s) and what you want from source control.
I used bugzilla in combination with Perforce for several years and found that both of them are really very good at personal things, working in a very small team (2-3 people), but suffer from the lack of integration between them and some small features, who took time to get used to.
I recently switched to a new job where TFS is widely used. This company has 4 main teams with 10-12 developers, each of which is divided into additional project teams, and it is in this environment that TFS really shines imo. In my opinion, these are the biggest advantages:
1) Integration with Visual Studio is not just a case of opening fewer windows, but it really speeds up your work and makes your life easier. Things like VS automatically check files for you when you work (no problems with random checks due to editing locks), the ability to synchronize local assemblies + TF, the ability to quickly compare the local version with previous ones. Third-party plugins for integration, but not one at this level and with the same stability.
2) Communication functions - simple things, such as integration with Live Messenger (with proper TFS settings), are great for large teams. We use WLM to communicate in the office and to work together as soon as possible than going to someone else every time you need to ask a quick question.
3) Linking assemblies / lists of lists to tasks - Yes, other SCMs do this, but again it is just done very nicely, integrated. I think this is nothing special for TFS, but I personally like the way it tracks it.
4) Easy merge / lock. I had experience with some other merge tools, and TFS works quite well, which makes merging after editing at the same time quite easy. This is very similar to perforce in this regard, but also with the usually quite effective automatic merge tool, which I use for small fixes, which, as I know, can not cause any potential problems with the changes that other developers are working on.
5) Building / construction management. Working with several large solutions containing 20-30 projects that depend on each other is a godsend. We queued it for assembly every 20 minutes, IF something changed, and when it happened, it is listed in the history log. It is also easy to see when you need to update local libraries.
I have no experience configuring it other than layout control, but I heard that this is the worst part of TFS. It's a little painful for everything to work correctly.
So, let's translate this into a business case. I would say that if you are a Microsoft product with a large number / several teams, then the time and performance savings that you will see as a result of the above functions are worth the investment in setting it up. It can be used in most cases, since you will probably have a subscription to MSDN (maybe some problems with CAL, but I'm not sure), so your biggest expenses will be associated with training and setting up users.