Rigify->Generate Rig doesn't create all rig layers in the properties ui
Reposting the solution as an answer as requested.

I was able to solve this by adding a new metarig into the scene and copying all the bone LocRotScale properties from the old one, using the script provided in this topic (thank you sambler): How to copy position, size from one armature to another?. Whatever the problem was, this fixed it and spared me from re-rigging everything from scratch.

The only thing I had to change in that script was my source and target armature names at the top:

import bpy

source_rig = 'metarig_old'
dest_rigs = ['metarig']

############

bone_data = {}

def edit_rig(rigname):
    bpy.ops.object.mode_set(mode='OBJECT')
    bpy.ops.object.select_all(action='DESELECT')

    bpy.data.objects[rigname].select = True
    bpy.context.scene.objects.active = bpy.data.objects[rigname]
    bpy.ops.object.mode_set(mode='EDIT')

edit_rig(source_rig)
for b in bpy.data.objects[source_rig].data.edit_bones:
    bone_data[b.name] = (b.head.copy(), b.tail.copy(), b.roll)

for arm_name in dest_rigs:
    edit_rig(arm_name)
    for b in bpy.data.objects[arm_name].data.edit_bones:
        b.head, b.tail, b.roll = bone_data[b.name]

bpy.ops.object.mode_set(mode='OBJECT')