The reason is that you can produce an &/&mut bool pointing to either of the two fields, which means that the internal layout of each bool has to be the canonical one— The consumers of those references don't know that an alternative memory layout might be in play.
If you put a bool into an enum with a bunch of unit variants, the same niche optimization as you get for NonZero will kick in and store the discriminant as unrepresentable values with an overall size of 1.