I recently helped a friend set up OpenVPN to a Linode for exactly this reason (shared captive wifi portal at his apartment building).
You don't want to use anything based on OpenSSH because SSH uses TCP which means its connection will go down when the wifi router is rebooted. With OpenVPN you can use UDP which will be able to survive such events provided you send frequent keepalive pings (specify the option 'ping 20' for 20 second pings). I don't have much experience with IPsec but I do know it can have problems getting through NATs (and why use it when OpenVPN is so awesome anyways

)
One way to make your VPN setup extremely simple while using your Linode's native IPv6 would be to use a layer 2 VPN (TAP instead of TUN) and bridging your home network to the VPN TAP interface on your OpenBSD router. Your Linode would be on the same subnet as your home network and would be your home network's default gateway (instead of your OpenBSD router), taking for example the ::1 address in the /64 that Linode routes to you. OpenVPN wouldn't need to deal with IP addresses at all, which is a good thing since its IPv6 support is pretty incomplete right now.
The big downside of using a TAP VPN is that all your home network's broadcast traffic will be sent over to your Linode.
I don't have any experience automating captive portal logins. If you know Perl and are willing to reverse-engineer the login process somewhat, I hear WWW::Mechanize is a good Perl module for automating web page interactions. You could combine that with a simple monitoring script and kick off the process whenever you can't ping your Linode.