I have had a chance to work a little more on converting objects to data tables. Oddur has asked about nested types and I have implemented them - to an extent. The issue is how far do I really need to take this? Our needs are simple, but I did run into having to handle enums. I decided that an enum would always produce a String column and that I would use the enum name as the value.
Recently there have been some articles about not using DataSets or DataTables in web applications. Scott Mitchell has Why I Don't Use DataSets in My ASP.NET Applications and More On Why I Don't Use DataSets in My ASP.NET Applications. Karl Sequin has On the Way to Mastering ASP.NET: Introducing Custom Entity Classes.