Because you can't coerce types inside of other types. i.e. the &mut i32 is inside of &[_], so you can't coerce it to &i32. This sort of coercion doesn't work in general so it is not allowed.
Another example of this not working in general: one fundamentally cannot &[&String] -> &[&str] in O(1) because those inner references are not layout-compatible (the latter being a fat pointer).
It doesn't work in general, but &mut T and &Tare layout compatible. The only reason this coercion doesn't happen is because the compiler doesn't allow it.
I guess that it would very problematic to determine on generic level, what is actually possible for coercion or what has different layout. There would be exceptions to exceptions, and after all very big mess. If you are using "embeded borrows", just use Borrow/AsRef traits which are designed for such cases:
use std::borrow::Borrow;
fn foo(x: &[impl Borrow<i32>]) {}
fn main() {
let mut a = vec![1i32,2,3,4,5];
let b: Vec<_> = a.iter_mut().collect();
foo(b.as_slice())
}