In terms of assembly versions etc then a date doesn’t give me enough granularity - especially when I’m doing Continuous Integration. I’d end up with version numbers like 2.0.0.200702161024 - which doesn’t really work due to technical limitations of the length of the build qualifier on some platforms – so you end up using an incrementing number and labelling your source repository with this number as you do the build. Recently, we’ve started using changeset numbers from our TFS repository as the build part of the version number (i.e. 2.0.0.50118). That allows us internally to very easily tie an individual build up to the exact codebase that went into that build - that is the point of including the build section in your assembly versioning after all. I am a little uncomfortable about “leaking” internal process data out to our customers - after all why do they care what the latest changeset is for our instance of TFS - however it is just an integer that always goes up so the end-user shouldn’t ever care about that number unless we ask them for it. Because we ship “preview” versions of our software to some customers, we need to keep the build number in the end user deliverable to make sure we know exactly what version of the software they are using. We obviously never mention build numbers in marketing – they are a fingerprint only.
However, the versions assigned to code units is a different thing to the marketing name of a product. Like you say, the versions of assemblies is like a dog tag - allowing you to track down problems in the event of an emergency. Assembly versions should have little to do with marketing names. However, when you do use a version number in your name than you kinda have to change some assembly versions somewhere or is gets really confusing. For example, look at the confusion around .NET 2.0, 3.0, 3.5 etc etc. Another example on Windows is Notepad. In the RTM release of Windows Vista, the ver command reports that Windows is 6.0.6000, which has version 6.0.6000.16386 of Notepad installed - but has the notepad product itself really changed enough to justify the 6.0 moniker ??
When it comes to marketing names, a friendly name for a version is great for consumer products. Windows Vista is much more memorable to a consumer than Windows 6.0.6000. I think this is where the Microsoft marketing folks are ahead of the ones from Cupertino. I know that Leopard is the code name for the next version of OS X - however when it comes out it will be 10.somethingOrOther that I’d have to check to be sure. I find it counter-intuitive that software for written for OS X 10.5 might not work on 10.2.
In the UK a vehicle registration plate has the year that the car was registered on it - hence you feel pressured to buy a new car because it is obvious how old your existing one is. The same is true for Office 2003 vs Office 2007 etc. The Windows 95 thing was a good idea, but after a while it just highlighted how long we are going between operating system releases
It also confused consumers when they were installing Office 2003 on Windows 95 (will it work they think - do I need Windows 2003 to run Office 2003??)
With things like Firefox, Internet Explorer, iTunes - the version number is of less marketing importance - you just want the user to be using your tool, and preferably the latest version. That is because you are not competing with yourself for market share (as Windows Vista does with Windows XP) – nor do those organisation gain much in the way of revenue by pressuring consumers into upgrading to the latest version.
One of the problems we have got ourselves into as an industry is that version numbering is used as a shorthand for lots of different things. Many corporations do not purchase x.0 releases of software - preferring to wait until a .1 or .2 maintenance release has come along. Now with “Service Packs” becoming more mainstream, this has also confused the issue. I know software vendors that release their initial versions as x.1 just to get over this corporate purchasing mentality.
For developers, we assume .NET style meanings to version numbers. 2.0 will be a major architectural change from 1.0. 2.1 will have some small breaking changes from 2.0 and 2.1.1 is just a maintenance release of 2.1.0…
In developer focussed products this can lead to tension. Java 6 has recently been released, but that is actually 1.6 of the JRE (there has been no major change in architecture to justify the major point of the version number to change, but there are a whole lot more additional features in Java 1.6 than Java 1.1…) Sun has a history of this type of marketing - anyone that uses Solaris will know about that.
For many software vendors it is a paid upgrade to go from 1.X to 2.X but an upgrade from 2.0 to 2.1 is often free. Therefore, for the vendor the choice of version number to use in their name becomes a business decision not a technical one. Additionally, because not many companies have consumer impact or the marketing clout to imprint a version name (such as Vista) in peoples minds - a version convention is a handy shortcut that expresses your products maturity and your companies continued investment in the product (again, probably the reason for Java being marketed as Java 6 rather than Java 1.6)
I’m not sure where this rant is going 
Basically, I think you should use assembly versions that work for your process, are as simple as possible and leak as little information about the complications of your internal development process to the outside world as possible - but still allow you the level of tracking that you need to be able to identify and fix issues.
From a marketing point of view, what you call the next version of your shrink-wrapped product is a different decision that depends on what your target audience is.
Sorry for the rant. It’s something I think about quite a bit and don’t really have any good answers to 