bool is a value type, this means that it cannot be null, so the Nullable type basically allows you to wrap value types, and being able to assign null to them. bool? can contain three different values: true, false and null.
These data types were added in C99. Since bool wasn't reserved prior to C99, they use the _Bool keyword (which was reserved). bool is an alias for _Bool if you include stdbool.h. Basically, including the stdbool.h header is an indication that your code is OK with the identifier bool being 'reserved', i.e. that your code won't use it for its own purposes (similarly for the identifiers true and ...
The values for a bool are true and false, whereas for BOOL you can use any int value, though TRUE and FALSE macros are defined in the windef.h header. This means that the sizeof operator will yield 1 for bool (the standard states, though, that the size of bool is implementation defined), and 4 for BOOL.
Bool is a well-defined primitive integral type, just like int, char, etc. It also has mathematical conversions to other integral types, which can sometimes be confusing for people, but I don't think that is the source of your current confusion.
2 bool is a primitive type, meaning that the value (true/false in this case) is stored directly in the variable. Boolean is an object. A variable of type Boolean stores a reference to a Boolean object. The only real difference is storage.
bool allTrue = true; allTrue = allTrue && check_foo(); allTrue = allTrue && check_bar(); check_bar() will not be evaluated if check_foo() returned false. This is called short-circuiting or short-circuit evaluation and is part of the lazy evaluation principle. Does this work with the compound assignment operator &=?
In C++, why is the bool type 8 bits long (on my system)? Only one bit is enough to hold the Boolean value. I used to believe it was for performance reasons, but then on a 32 bits or 64 bits machine,
bool and _Bool, and true and false are language keywords for boolean types. bool / _Bool is a type that can hold either the value true or false. Logical operators !, ||, and && can be used.