Thanks for your reply.
Turns out, my portal is not a child portal, so that's not the problem.
I did a bunch more searching and found this, *which solved my problem*, but I have no idea why.
http://forums.asp.net/1037419/ShowPost.aspxMy (limited) understanding of this fix is: if you set a session variable, it causes IIS (or whatever framework your hosting provider is using to distribute load or provide failover or proxying or whatever) to behave differently. It does this by either a) ensuring that the rest of that browser session stays on the same server, or b) activating whatever mechanism your hosting provider has to preserve session state across multiple web servers.
Why does this help what appears to be a cookie problem?
In the case of a), it would (presumably...I'm just guessing here) help because DNN login authetication works by setting a cookie on your browser that is based on the Ethernet MAC address of your server. If during a session in which you are logged in, you suddenly are connecting to a different server, with a different MAC address, your cookie is no longer any good. So setting a session var doesn't actually change cookie behavior (on the client or server side), but it has the happy side-effect of forcing a browser's entire visit to the site to take place on the same server. If you have set a long login expiration period in DNN, it might be limited if your hosting provider sets a lower default value for IIS session lenght. Check MSDN, there is a way to add a line to default.aspx that would override this hosting provider setting and make it equal to your DNN setting. It's a workaround.
In the case of b), presumably the hosting provider has configured all the servers in the farm to use the same "virtual" Ethernet MAC address?
Your Mileage May Vary.
The ultimate solution might, in the worst case, require DNN use something besides the server MAC address as the basis for creating the authentication cookie. Which probably isn't straightforward....