表題の問題でハマりました。Devise gemのsign_outを引数なしで呼ぶと、Devise管理かどうか関わらず全てのセッションをクリアしてしまうので気をつけましょう。
- Deviseのsign_outを引数なしで呼ぶと、sign_out_all_scopesを呼ぶ
- sign_out_all_scopesではwarden.logoutを引数なしで呼ぶ
- warden.logoutを引数なしで呼ぶと、reset_sessionという変数をtrueに設定し、結果reset_session!が呼ばれる
- reset_session!ではraw_session.clearが呼ばれる
- ActionDispatch::Request::Sessionのclearが呼ばれるので、sessionの中身を全てclearする
ログイン状態とは関係ない状態をsessionに保持している場合は、意図せず壊れることがあるので気をつけましょう。