I agree that the two subtypes have defined Canonical representation, and total order. However, the rules for subtypes can not be applied back to their base type. As in the W3C spec, Duration  does not define canonical representation.
That said, DatatypeFactory does have newDurationYearMonth and newDurationDayTime methods that are defined as the XQuery/XPath specs. I expected that a duration created with these methods would return normalized. Unfortunately, it did not in my test (Duration d0 = dtf.newDurationYearMonth("P20Y15M");). That gave me a second thought, and I think I might understand what you're expecting, that is, even with a general representation, the implementation could have been made smart enough to detect that the input conforms to a defined subtype and therefore behaves accordingly. Would this change cause regression? It's possible. But the newDurationYearMonth methods are wrong.