You can simplify pickle_lambda in the test by using marshal.dumps(code_obj) and marshal.loads(code_obj) to dump and load the code object without going through its entire guts. It would be a shame to have to change a pickle test just because some detail of the code object implementation changes.
Is saving global an atomic operation? Falling back to using reduce can be not safe if some data was written during saving global. That also might make error messages less helpful. Is not founding a function the only cause of PicklingError? Raising and catching an exception is not very efficient. Shouldn't the fallback be used for classes and C functions? If add this feature the patch should be significantly reworked.