Yes (PEP 335), and also because other operators were never added that could be used for these things although various proposals were made and rejected. Ultimately the Python ecosystem had to make do with the operators available and as a result there is a widespread convention that ~ is used for logical negation of booleans.
There is no reason why bool couldn’t do the same apart from the accident of history that it inherited less useful behaviour from int. Hence someone opened an issue asking to change ~bool to do the right thing but the discussion then just decided to deprecate and remove it instead.
The usefulness of an operator like ~ behaving consistently across different types is that you can write generic code that works with different types so that the same code works with either numpy boolean arrays, or sympy logical expressions or plain bool. There is no way to write a function that works like that though because bool defines ~ wrong and not does not work with anything other than bool:
>>> not np.array([True, False]) # numpy (multiple values)
...
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> not (x > 0) # sympy (symbol may or may not be positive)
...
TypeError: cannot determine truth value of Relational