So is truncating the upper bit the correct thing to do? I looked at the mapping and it wasn't clear to me that everything with the 4th bit set cleanly mapped to its lower 7-bit form. Whlie a lot of them made sense, I wans't sure that for example, if something was in brown it should then become yellow.

The fourth bit is "bright" - bright white, etc. Strictly speaking, sure, it would be nice to block "bad" color early, but we do not have good way to announce this level of color limit up to tem, and since efi text mode is very corner case (on x86 we practically only expect to see FB mode). I guess we should eventually set up some sort of API to query hw capabilities in detail, but I do not want to deal with it right now:)