I got some great help from chromatic today, he was able to trace the problem I was having in a much more aggressive way then I was doing it previously. I thought that the problem was in src/strings.c:Parrot_unmake_COW. I was getting a segfault on a pointer dereference, but I was getting thrown for a loop because the pointer in question wasn't NULL. Instead of a NULL pointer problem (which all my PARROT_ASSERTs were assuring me wasn't happening).
Chromatic tracked the error down to the pool compacting code in src/gc/resources.c. This is code that I personally haven't modified (or at least, not modified it much). However, other changes I've made elsewhere must have screwed it up some how.
Anyway, commenting out the compaction code fixed my segfault! However, in it's place, i get the cryptic error "list structure chaos #2!" from the code in src/lists.c. Digging through that code (which is old, largely uncommented, and dense) has yielded few results so far. I added some comments and fixed the error messages to be more helpful.
For the moment, I'm going to ignore the compacting code, and I'm going to try reinserting the sweeping code. Hopefully, I can make some good progress now.