I think pytorch here is following same numpy behaviour, as @albanD mentioned:
1- When a boolean tensor / array is passed to index, it will perform a mask behaviour.
2- Both in pytorch and numpy, when providing a Python List it will assume as coordinates to grab:
>>> import numpy as np
>>> a = np.array([[1, 2], [3, 4]])
>>> a[[[1, 0], [0, 1]]]
array([3, 2])

Which reads as:
1- From row 1 pick column 0
2- From row 0 pick column 1
The only thing that differs from pytorch and numpy here is that pytorch is interpereting True = 1 and False = 0 (as suggested by @albanD)