XML is a good solution for some sticky problems.
For example, I'm programming an application that stores information for physical exams that a medical practice performs. The problem is that the exam is rather dynamic, in that it frequently changes (doctors are a contentious breed), and updating the database was becoming a real challenge because of the necessity of keeping old data and new data in the same tables.
The solution was to store the raw exam data in an XML field, but keep basic patient information (ExamID, DateOfService, ExamType, etc) in regular SQL Server fields. That way I could retrieve the XML field, then query and update it using XML classes directly from my windows application. The good news is that if the XML node isn't present, the XML query simply ignores that part of the query without breaking the code. In other words, the structure of the exam can change without blowing up the application or requiring major changes in my existing functions in the data layer. Really nice.