This is not precisely what you are looking for, but I'll offer it as an alternative.
I found the same problem when I was adding support for ISO8601 dates to Date::Manip, and I wanted to find out which fields had been set.
Date::Manip (which will parse all of the ISO8601 dates) has a method (complete) which will tell you what fields were explicitly added, and which are implied. So you end up with:
my $obj = new Date::Manip::Date;
So, if you can't get DateTime to do it, you may want to look at Date::Manip.