I'm presuming `OrderedDict` does the right things here:
* `.copy()` returns another `OrderedDict` preserving the order
* updating a value retains it's original place in the order