Using ICU4C on Linux, with version 63 both "C" and "C.UTF-8" are treated the same and both are mapped to "en_US_POSIX".
With version 64, only "C" is mapped to "en_US_POSIX". Now "C.UTF-8" maps to just "c".
This means that “C.UTF-8” is effectively no different than a default locale of “bogus“ with ICU 64, and thus everything would fallback to root.
You can reproduce the issue with the following command, and examine the value of the:
"<param name="locale.default">" from the “icuinfo” program:
Here is the difference in table form, for 57, 63 and 64:
From looking at the changes in ICU 64, it looks like this is due to the change for ICU-20187.
However, it is unclear if this is intentional or not.
Based on the comments on the ICU 64 API Proposal doc, it seems like the intent was to keep some of the POSIX mappings, but I'm not sure if this also included the C locale with the codepage as part of the name as well. (Though it does seem odd to support mapping for "C" but not "C.UTF-8").