When boxing value types in C#/.NET, an object on the heap is created.
What happens when you box a bool value?
Since there are only two possible values, are the box objects reference equal?
The answer is: No. For example, boxing true twice results in different objects.
Consider this code:
var obj1 = (object)true;
var obj2 = (object)true;
Console.WriteLine(ReferenceEquals(obj1, obj2)); // prints "false"
There are not even BCL constants for true and false (unlike Java). This issue is behavior is discussed in this GitHub issue.