ICU locale canonicalization (and some other code) handles variants like EURO, PREEURO, and PINYIN that either we or someone else invented long ago, before we got script codes and "u" extensions added to BCP 47.
I suspect that no one uses EURO and PREEURO variants any more.
"pinyin" is a valid language subtag, but its registered meaning is "Pinyin romanization" while ICU turns it into @collation=pinyin (= -u-co-pinyin). We cannot know which one a user means, so we should probably drop this mapping.
I assume that we still need (some of?) the .Net and POSIX locale ID mappings.