Most of this comment is just nits.
Probably irrelevant to this topic, but this has never been true.
Box<dyn Trait> bounds are more nuanced than that.
- The lifetime is inferred within a function body
- The lifetime is bound in generic structs with an explicit bound
- RFC 2093 (maintaining the RFC 1156 rule for this case)
While true from a subtype perspective, Unsize coercion can make 'b act covariantly (search for "Interaction with object coercion"). [1] This doesn't matter when the lifetimes are intertwined with others in the signature, as you note.
How would that be phased in considering these currently-non-overlapping implementations?
impl<T /* : Sized */> Trait for [T] {}
impl<T /* : Sized */> Trait for T {}
impl Trait for dyn Display {}