I got all of this working. Unfortunately the solution is very tied in with both the module's persistency setup as well as its spawn system (NESS) so its difficult to share.
I never figured out how to determine which way a creature is flipped after they are dead. Getting this information would be nice, but in the end Its not too much of a problem since it makes more sense to look at a corpse or place a corpse face up. So I just ensure that the corpse I create falls face up. The PC's corpse has a 50% chance of flipping over (if its not already face up) when the PC "respawns" as a ghost in "the fugue".
So anyway, here's how I handled corpses:
PCs leave their normal corpse (a dead character) until they respawn. NPCs leave their normal corpse, until their corpse is picked up and then put down again. After those events, I create a doppelganger that looks like the dead creature, dress it (if it had anything equipped) and then kill it whenever I need to see a corpse on the ground. These corpses are not destructable, not raisable, and not lootable.
Instead I link an invisible placeable with inventory to the visible body. The invisible placeable is the node with which all corpse related things happen. Looting, animating, skinning, raising...
For persistency I link the inventory to a creature somewhere else which is linked to the dead character's corpse. This inventory is maintained as a copy, and starts a save process once a minute whenever the linked inventory changes (ondisturbed event).
For persistency of all the data saved on the corpse I link the data to an item in an inventory elsewhere. If the corpse is ever destroyed in game or raised this data item is also destroyed. Having the persistent data makes corpses persistent across server resets, including their location. Storing the "corpses" in an inventory makes a nice place to have a list of all active corpses if I ever need to check rather than making database queries. I just load this inventory once at onmodule load and then check it or update it as things change. I periodically save it (once a minute).
Corpses are also carryable as items. The item needs to be put down on the ground to interact with where it becomes a placeable and has all the normal functionality. BUT a raise or animate spell can target an item corpse just as well as the placeable.
What functionality is open to any particular corpse is identified in a series of bit flags buried in one integer: corpse type. These are animating, raising, skinning, and persistence.
Anyway, thats the quick and dirty. I may upload this sometime if I have time to rewrite it for public consumption.