Something like this should work (only tested on a small test map):

Code
INIT:
DB_MainPlayers(CHARACTER_Player1);
DB_MainPlayers(CHARACTER_Player2);
DB_MainPlayers(CHARACTER_Jahan);
DB_MainPlayers(CHARACTER_Madoc);


KB:
// Sync henchman level when joining the party
IF  CharacterIsPlayer(_Henchman)
AND DB_HenchmanPool(_Henchman)
AND CharacterIsPartyMember(_Henchman, 1)
THEN
	PROC_SyncHenchmanLevel(_Henchman, CHARACTER_Player1);

// Iterate over all henchmen and sync their levels whenever the first PC has leveled up
IF  CharacterLeveledUp(CHARACTER_Player1)
AND DB_HenchmanPool(_Henchman)
AND CharacterIsPartyMember(_Henchman, 1)
THEN
	PROC_SyncHenchmanLevel(_Henchman, CHARACTER_Player1);

// Level up the henchman if its underlevelled
PROC PROC_SyncHenchmanLevel((CHARACTER)_Henchman, (CHARACTER)_SyncToCharacter)
AND CharacterGetLevel(_Henchman, _HenchmanLevel)
AND CharacterGetLevel(_SyncToCharacter, _SyncCharacterLevel)
AND IntegerSubtract(_SyncCharacterLevel, _HenchmanLevel, _LevelDifference)
AND _LevelDifference > 0
THEN
	CharacterLevelUp(_Henchman);
	// Call the level sync recursively in case the henchman is multiple levels behind the main PC
	PROC_SyncHenchmanLevel(_Henchman, _SyncToCharacter);