Thanks for the response, but I'm trying to get the existing code outside of DNN to work as is.
I've managed to do it, so I document that here in case anyone else wants to know.
Firstly, the question wasn't a particularly good one. ASP.NET ITSELF manages HttpContext.Current.User, persisting User.Name and User.IsAuthenticated between page cycles using the security token it saves in a cookie. However, it does not persist role memberships, so that is all you have to add for this to work.
I created an extremely simple HttpModule to populate the roles on each request from data that DotNetNuke makes available. This is simply a case of a line like the following:
HttpContext.Current.User = New GenericPrincipal(HttpContext.Current.User, UserController.GetCurrentUserInfo.Roles)
Then any tests on HttpContext.Current.User.IsInRole("rolename") work perfectly.