I think part of this confusion is historical. Once upon a time, Rust was a different language that did not a general mechanism for dynamically-sized types.
[T] could not exist on its own.
&mut [T] were special cases in the language, called (mutable) slice. And there was probably a point where
Box<[T]> did not exist (I don’t remember exactly).
Then DST came along and generalized things.
SomeTrait (used as a type) and
[T] are now both valid types of their own (though you can not have values of these types directly on the stack). Separately,
Box<U>, and others are generalized so that they support any U, even dynamically sized. So
&[T] is not a special case in the language anymore, it’s two concepts
&U used together with
U = [T].
I don’t know if it’s been done formally, but one way to retrofit the terminology for this new world is:
[T] is a slice.
&[T] is a shared reference to a slice, but is usually called a slice for short. It’s ambiguous, but
[T] can rarely be used on its own anyway so context usually clarifies.
&mut [T] is a mutable reference to a slice (though I prefer to call
&mut U exclusive reference), usually called mutable slice for short.
Box<[T]> is a boxed slice. (It’s rarely used in practice, since
Vec<T> is more convenient and often works just as well.)