I haved copyied/mirrored the Admin/App_coded/ImpersonationHandler.cs code for logins like this in the past. Since that is basicly what you are doing with aditonal logic. Which boils down to tree calls:
1. loggin in with the GetOwinContext
2. calling ExecuteSigninLogic
3. calling UpdateCustomerSession calls.
Which code wise looks like :
Customer ThisCustomer2 = new Customer(CustomerID);
Func<IClaimsIdentityProvider> ClaimsIdentityProviderFactory = DependencyResolver.Current.GetService<Func<IClaimsIdentityProvider>>();
var claimsIdentityProvider = ClaimsIdentityProviderFactory();
var identity = claimsIdentityProvider.Create(ThisCustomer2);
properties: new Microsoft.Owin.Security.AuthenticationProperties
IsPersistent = true
Hope that helps point you in the right direction.