I believe that I figured out what was going wrong with the code, and the new version passes all of the tests (consecutive reloads without killing, consecutive reloads with killing, killing after moving, killing with Respawn enabled/disabled).

My belief is that upon Initialization, the living characters spawned via the SpawnCharacter command are given new GUIDs. Because the scripts were storing the character after they were spawned, when it came to OnInit the stored character and the living character with a new GUID are no longer equal. Thus the %spawn variable storing the spawned character is unreliable, and can only really work so long as the game isn't reloaded.

My solution then was to focus everything around the original character's GUID, since that will always remain constant across different save reloads. I have the script set so that the spawned characters store the original character as a variable, which they can then check upon death (and manipulate so that the parent realizes they no longer have children).

Here is version 3 of the mod, which should have everything working correctly now.
http://www.mediafire.com/download/mdjb913an5t2phv/RespawningEnemiesWIPv3.zip

And the code-

Default Character changes-
Code
INIT

INT:%canRespawn=0
CHARACTER:%parent=__Me
FLOAT3:%spawnPos=null
INT:%hasChild=0


EVENTS
EVENT RespawnCharacter
VARS
CHARACTERTEMPLATE:_root
FLOAT3:_myPos
CHARACTER:_child
ON
OnInit()
ACTIONS
IF "c1&c2&c3&c4&c5"
IsEqual(%canRespawn, 1)
CharacterIsDead(__Me)
CharacterGetTemplate(__Me, _root)
GetPosition(__Me, _myPos)
IsEqual(%hasChild, 0) 
THEN
IF "c1"
IsEqual(%spawnPos, null)
THEN
Set(%spawnPos, _myPos)
ENDIF
SpawnCharacter(_child, _root, %spawnPos, 0)
SetVar(_child, "parent", __Me)
Set(%hasChild, 1)
Set(%canRespawn, 0)
ENDIF

EVENT ProgenyDeath
VARS
FLOAT3:_myPos
ON
OnDie(__Me,_,_,_)
ACTIONS
IF "!c1&c2"
IsEqual(__Me, %parent)
GetPosition(__Me, _myPos)
THEN
SetVar(%parent, "hasChild", INT:0)
SetVar(%parent, "spawnPos", _myPos)
CharacterEvent(%parent, "CheckForRespawn")
ENDIF

Note that the OnInit function is meant to be run by the original characters, while the OnDie event is meant to work for the spawned characters only.


Story code-
Code
INITSECTION
DB_RespawnEnabled(1);


KBSECTION
IF
CharacterCreationFinished(CHARACTER_NULL)
AND
CurrentLevel(_Lvl)
AND
DB_CharacterCreationLevels(_Lvl)
THEN
CharacterAddSkill(CHARACTER_Player1, "Shout_RespawnEnable");
CharacterAddSkill(CHARACTER_Player1, "Shout_RespawnDisable");
CharacterAddSkill(CHARACTER_Player2, "Shout_RespawnEnable");
CharacterAddSkill(CHARACTER_Player2, "Shout_RespawnDisable");


IF
CharacterUsedSkill(_Char, "Shout_RespawnEnable", _)
AND
DB_RespawnEnabled(0)
THEN
NOT DB_RespawnEnabled(0);
DB_RespawnEnabled(1);

IF
CharacterUsedSkill(_Char, "Shout_RespawnDisable", _)
AND
DB_RespawnEnabled(1)
THEN
NOT DB_RespawnEnabled(1);
DB_RespawnEnabled(0);

IF
CharacterDied(_Char)
THEN
CharacterSetEvent(_Char, "CheckForRespawn");

IF
CharacterEvent(_Char, "CheckForRespawn")
AND
DB_RespawnEnabled(1)
THEN
CharacterSetVarInteger(_Char, "canRespawn", 1);