Create a job J, let it depend on two labels (A && B).
Have a slave S with one executor and both labels, A and B, assigned.
S is idle, no builds.
Request a build of J.
The build waits patiently in queue ("waiting for next available executor on S").
Edit S, set #executors to two.
Watch the requested build start, actually using only a single executor.
If I instead use the expression (A || B), the build starts with just one executor on S.
I have not tried the "implies" expressions as I believe they're hard to force to run on a particular slave.
If the labels are assigned to the master instead of a slave, the expression (A && B) works with a single executor.
Another data point: Having one two-labeled build (eg "J" above) running on a slave ("S") and then trying to start a different build with two labels (eg A && C), requires three available executors on the slave.