In the from impl, what if you replace T with Box<dyn ATrait + 'a>, then you will have a conflicting impl with From<T> for T impl, so the compiler rejects your impl. This is correct and can be fixed by removing the ?Sized bounds because dyn Trait: Trait and is unsized (i.e. doesn’t impl Sized) like how @Ixrec said above. This means that it is guaranteed to that Box<dyn ATrait + 'a>: ATrait is false, which means it cannot conflict with From<T> for T due to the constraint on T (T: ATrait).
edit: code blocks for clarity
impl<U: ATrait + ?Sized> ATrait for Box<U> {}
// replace `T` with `Box<dyn ATrait + 'a>`
// this is valid because `Box<dyn ATrait + 'a>: ATrait` by the first impl
// oh no a conflict with `impl From<T> for T`
impl<'a> From<Box<dyn ATrait + 'a>> for Box<dyn ATrait + 'a> {}
impl<U: ATrait> ATrait for Box<U> {}
// replace `T` with `Box<dyn ATrait + 'a>`
// this is no longer valid because Box<dyn ATrait + 'a> doesn't implement ATrait,
// because `dyn ATrait` is not `Sized`, this means this impl doesn't even exist!
// yay no conflicts
// impl<'a> From<Box<dyn ATrait + 'a>> for Box<dyn ATrait + 'a> {}