Попробуй при загрузке страницы явно вызвать функцию обновления списка, чтобы состояние второго списка сразу установилось. У меня когда-то была похожая проблема, и решение оказалось в том, что событие onchange лучше комбинировать с onload. Это позволило сохранить данные даже при возврате на страницу. Еще можно сохранить выбранное значение в localstorage и при загрузке читать его. Мне кажется, так всё станет стабильнее и понятнее, как минимум за исключением мелких нюансов.
Попробуй при загрузке страницы отлавливать событие pageshow, чтобы точно обновить состояние, даже если оно восстановлено из кеша браузера. У меня такой подход сработал лучше, чем onload, так как pageshow срабатывает даже при возврате на страницу. Это помогает избежать проблем с неактуальным состоянием элементов управления.
Событие onpageshow мне помогло, когда кеш заставлял элементы вести себя странно. Скрипт обновлялся сразу после перехода назад. А какие способы у вас проверены для сохранения состояния при возврате на страницу?
Попробовал вариант с событием DOMContentLoaded, и он мне очень помог в своей задаче. Когда DOM уже готов, сразу же обновляется состояние второго списка, атрибут disabled правильно устанавливается, даже если возвращаешься на страницу из кеша. К тому же, сохранять выбранное значение в sessionStorage можно, если событие иногда пропускает нужные моменты. В общем, такой подход реально решал не только мою проблему, но и помогал избежать лишних ошибок.