Вот ответ который все объясняет.
Если бы эта функция работала:
fn deref_rm<'a,'b>(x: &'a &'b mut u8) -> &'b u8 {x}
То мы могли бы получить иммутабельную ссылку одновременно с мутабельной, что запрещено правилами заимствования.
Тут есть интересный момент - если задать время жизни внешней ссылки большим или равным времени жизни внутренней то функция будет компилироваться без ошибок:
fn deref_rm<'a:'b,'b>(x: &'a &'b mut u8) -> &'b u8 {x}
В данном случае внутренняя мутабельная ссылка иммутабельно заимствована все свое время жизни и ее нельзя использовать для изменения данных, на которые она ссылается. Вот пример, где мутабельная и иммутабельная ссылки легально существуют одновременно:
fn deref_rm<'a:'b,'b>(x: &'a &'b mut u8) -> &'b u8 {x}
fn main() {
let mut data = 1u8;
let mdata:&mut u8 = &mut data;
let rdata:&u8 = deref_rm(&mdata); //let rdata:&u8 = &*mdata;
println!("{}", rdata);
println!("{}", mdata);
//*mdata = 2u8; //cannot assign to `*mdata` because it is borrowed
}