A Invariant<'t, T::Output> struct is invariant over both 't and T::Outputand comes with an implicit T::Output: 't bound (due to using the type &'t T::Output). It looks like the compiler is trying to prove T::Output: 't, sees that <T as Rebind<'b>>::Output can only be guaranteed to outlive 't if T: 't and 'b: 't, sees that those conditions fail, and reports those failing conditions instead of the root error.
However, for the non-async version of test, the fact that Invariant<'t, T::Output> is mentioned results in an implied bound of T::Output: 't. I suppose that adding async causes that bound to no longer be implied.
Explicitly requiring the usually-implied bound makes it compile: