What is happening is that Rust is choosing the lifetimes to be different that what is shown.
When you swap the parameters, you are changing the problem entirely. Also, you should note that lifetimes no longer correspond to lexical scopes, they correspond to invisible scopes that are determined by when values are used.
The statement that
<'a: 'b, 'b> reads as lifetime 'a is at least as long as 'b .
is true, and is necessary for correctness. If you would like to see an example of how this comes up in a more visible, but more complex and niche way, see my answer here