Hi Rob,
While your first change seems pretty useful, I'm a bit concerned about the change to ToStableUniversalTime. This extension method is designed to provide a reliable way to implement the functionality originally intended by the core framework's ToUniversalTime method. Changing it as you suggest means that it no longer mirrors this functionality, and should therefore be considered a breaking change, not to be introduced lightly.
Can you explain why you believe it's any more valid to assume that a DateTime of DateTimeKind.Unspecified should be treated as UTC than to assume that it's Local? The core framework makes the assumption that if you're calling a convert method, and the kind of DateTime is not already set to the kind you're converting to, then it should be converted.
What you're suggesting is that:
new DateTime(2012, 6, 2, 17, 46, 0).ToStableUniversalTime should NOT do a conversion, but new DateTime(2012, 6, 2, 17, 46, 0).ToLocalTime() SHOULD do a conversion. Not sure why logically you'd want one of them to convert, but the other not?
Cheers,
Richard.