As per Unicode Locale Identifier specification (http://www.unicode.org/reports/tr35/#Unicode_locale_identifier), variants should be sorted for canonical form.
ICU explicitly avoids sorting, a comment suggesting variant order needs to be preserved. Might it be necessary to limit sorting to toLanguageTag()? Or perhaps toLanguageTag and forLanguageTag, but otherwise not (i.e. don't unconditionally sort variants, impacting other constructors)?