Ага, здравый смысл. например аллокатор увидел что можно данные более кэш-френдли компактнее хранить, и вектор решил переаллоцировать строку (ведь это деталь реализации). Что, такого быть не может?
Так что &str валидный, пока вектор не изменит String внутри себя явно или дропом.
Но компилятор этого не знает, и не знает, что ссылка как-то связана с массивом. Так что имеет право сделать например такую оптимизацию наша_типа_статическая_str.ptr_eq(&vec[0]) -> false.