Мне кажется, это тоже связано с разными типами.
Попробуйте заменить double на int, что-то изменится?
В общем, здесь:
double &dr=x; мы присуждаем dr ссылку на x. А там у нас 777. Компилятор автоматически преобразовывает int в double.
Когда мы поменяли x, dr не смогла найти правильный адрес, поэтому и не изменилась.
Но я и сам не уверен.