C should still have been automatically mapped to something else by the time it got to uloc_setDefault().
FWIW, when testing on a Ubuntu system with ICU 64.1, when settingLANG=C.UTF-8, the default locale reported by ICU was c
(Maybe the default locale setting only does Level 1 canonicalization? I think the C → en_US_POSIX is “Level 2” canonicalization?)
So after doing some checking it seems that “C.UTF-8” no longer maps to “en_US_POSIX” as of ICU 64, yet “C” by itself does still map to “en_US_POSIX”. I filed a separate bug (ICU-20575) since it seems odd that it is no longer consistent.