Here is how I solved this.
(Coordinates written as 1,2,3 refer to X:1 Y:2 Z:3, for example.)
Setting up the "Cube Cam"
Add a Camera and an Empty at location 0,0,0 and set rotation of each to 90,0,0 degrees. If you choose "Arrows" for the Empty display type it may help avoid confusion later.
Parent the Camera to the Empty. The reasons for rotating and then parenting in this order are so that the Camera's coordinates will match the reference image above, and so that the Empty's -Z will point in the same direction as the Camera's when the Camera is facing forward.
The Empty serves to allows the Camera to be easily repositioned, because the Camera's keyframed rotation will be relative to the Empty, not the World.
Set the Camera's Focal Length to 16mm (or 90° Field of View). This is necessary for the "faces" of the cube map to touch exactly.
Set your render dimensions to a power of two, such as 512, 1024, etc.
Leave the Start Frame at 1. Set the End Frame to 6. There will be one frame for capturing each direction of a cube's faces.
Keyframe the Camera's rotation accordingly in these frame numbers:
- 90, 0, 90 (left)
- 90, 0, 180 (backward)
- 90, 0, 270 (right)
- 0, 0, 0 (down)
- 180, 0, 0 (up)
- 90, 0, 0 (forward)
Optionally, you can add a guide object containing text labeling the directions (visible in the viewport, but not in renders), and parent this to the empty as well. And you can group these three objects (Camera, Empty, text guide) together, so that they can be easily appended to other .blend files.
With these steps completed, by rendering an animation you can capture the 6 images for a cube map. This answer is a work in progress, and I will add more soon about appending this camera setup, rendering cube maps from existing equirectangular maps, and compositing the 6 images into a single map.