Hummm... turns out the documentation I had was wrong, and both coordinate systems were already left-handed, with same axes and everything. My problems was with the aspect ratio. If you ever do viewPort.Width/viewPort.Height to get the aspect ratio, you're doing it wrong! Int/Int gives an int.
Better to do:float(viewPort.Width)/float(viewPort.Height)
Even better is to use C++ style casts:
static_cast<float>(viewport.Width) / static_cast<float>(viewport.Height)