sure, an example is Robwat's post , you should be able to have mixed physical and virtual items in your cart , the cod settings should only be applied to the physical items though , not just automatically completely disable the COD module if a virtual product is in the cart.
Perhaps Virtual and Physical products could be split on the checkout confirmation page and separate shipping listed? only 1 total at the bottom would be needed.
The cod fee message on the checkout payment page could be a custom message set in Order Totals Page in admin (note if a no is selected in the Admin/Order Totals for the selected shipping method , then the COD option is not displayed on the checkout payment page at all)
I also think that instead of having all those things in Order Total Modules the cod module could read the installed shipping modules from the database and allow you to change settings for them , making it easy to disable COD on the payment page for shipping methods that cannot use it, so that the customer is not given the option of Cod for any particular shipping method if it's not set in the admin panel.
This to me is a more universal approach and saves people having to find or make edits to cod.php or their shipping modules if they are ones that aren't in the standard installation package.
I'm not sure if I've explained it properly so perhaps something like this (the pic is hopefully easier to understand )