When knockout applies a binding it will evaluate the expression you gave it through your data-bind, and then, if it evaluates to an observable, its
content is extracted to be used and used as value for the binding. On the other hand, the expression is processed and evaluated by the javascript engine proper, which knows nothing about knockout.
So, taking your case as example, an expression like UserSelected && WritePermission will be interpreted by javascript as a request to verify if the properties UserSelected and WritePermission on the current context ($data) are null (or any kind of false as understood by javascript) - which they are not since they contain the observable itself. The engine evaluating the expression would not even know how to extract the value inside the observable unless you explicitly tell it - i.e. by calling the observable as a function.
By the way, while not common (and not usually a good idea i would add...), it may be perfectly fine to check for the existence of an observable rather than its content, so it makes sense (IMO of course) that knockout does not try to automatically trap and unwrap every observable encountered in expressions - even not considering the intrinsic difficulty of trying to do such an operation... :)
Cris