This doesn’t work because a &dyn Trait is a "fat" reference, storing a pointer to the type's vtable in addition to the pointer to the value itself, whereas a &Type is just a normal "thin" reference. But's easy to fix, you just need an explicit coercion:
let refs = vector.iter().map(|a| a as &dyn SomeTrait).collect::<Vec<_>>();
The problem is that coercions in a flat buffer can't happen behind indirection like that, since there are two different element types. You simply can't expect to convert a &[T] to &[U] in-place, since there's no guarantee that values of type T are laid out/represented in the same way (or even fit into) as values of type U.
If you want a slice of type [U] out of a slice of type [T], then you'll have to convert each value one-by-one and put the elements into a new vector/array.
But that's what the code does? OP's code collected a Vec<&SomeType> which does not deref-coerce to a &[& dyn SomeTrait]; I added a map call so that the collected Vec has the correct type Vec<&dyn SomeTrait>.