Long story short: I had wrapped Py_Initialize() and Py_Finalize() in a class' constructor and destructor to apply RAII so I wouldn't forget to call Py_Finalize(). Unfortunately, I had created an instance of the class inside the try block that I was using to handle the exceptions. So when the exception was thrown, the stack unwound and Py_Finalize() was called while Python had it's pants down (metaphorically speaking). Boom.
The irony is that the problem only showed up in test code, and wouldn't have been a factor in any of the actual usages in the application because of the way that I was initializing Python. At least, I now know one possible cause for that kind of error, and have something to look for the next time I see something like it.