Reordering OrderedDict
You can simplify it to this:

def reorder_ordereddict(od, new_key_order):
    new_od = OrderedDict([(k, None) for k in new_key_order if k in od])
    new_od.update(od)
    return new_od


The first line establishes the required key order, being careful not to introduce keys that don't already exist.

The second line takes care of the rest.  The existing keys not explicitly mentioned should come out in the correct order when update() iterates through the keys of od.