craft()->urlManager->setRouteVariables() loads the correct template but does not pass in the variables
My solution was to load the template directly rather than routing to the controller first.  Essentially, in my registerSiteRoutes() function I replaced this:

"payment" =&gt; ['action' =&gt; 'someController/doPayment']


with

"payment" =&gt; 'templateDir/core/payment'


I didn't even realize you could do this in registerSiteRoutes()!