Q:

PowerShell: Why does truth contain lies?

PS C:\> $true -contains "Lies"
True

...?  
help about_operators says

comparison operators include the containment operators (in, -notin,
  -contains, -notcontains), which determine whether a test value appears in a reference set.

$true is not a collection, how can it be a "reference set" and contain ... anything at all? It doesn't contain falsey things. 

Similarly $null -in $null is True

A:

$true get converted to a collection of 1 element, so it's equivalent to:
# ~> @($true) -contains "Lies"
True

So each element in the collection gets compared to "Lies" :
# ~> $true -eq "Lies"
True

So the real question is, why does the above expression evaluate to true. What's happening is that it is converting the right hand side of the oepration to match the type of  the left hand side:
# ~> $true -eq [Bool]"Lies"
True

because:
# ~> [Bool]"Lies"
True

so if you swap the operation:
# ~> "Lies" -eq $true
False

because:
# ~> [String]$true
True

Similarly, $null -in $null is the same as $null -in @($null) and $null -eq $null is true.

