Random Crash with Events in FPersistentFrameCollectorArchive

I’m having a Random Crash when an Event is being received by a blueprint. It’s quite random. The same code works fine most of the times, but when it happens, it crashes the editor without being able to see the crash report window. It just crashes.

If I debug it with visual studio I can see this:

Ensure condition failed: bIsValidObjectReference [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/CoreUObject/Private/UObject/UObjectGlobals.cpp] [Line: 3389] 
Invalid object referenced by the PersistentFrame: 0x000000ac27362cd8 (Blueprint object: Blueprint /Game/ThePrison/Blueprints/BP_ThePrisonCharacter.BP_ThePrisonCharacter, ReferencingProperty: ObjectProperty /Script/DamageSystem.TakeDamageProperties:Victim, Instance: BP_ThePrisonMainCharacter_C /Game/ThePrison/Maps/Test/UEDPIE_0_L_Test_Combat.L_Test_Combat:PersistentLevel.BP_ThePrisonMainCharacter_C_0, Address: 0x000000acd0b1d550) - If you have a reliable repro for this, please contact the development team with it.
UE4Editor.exe has triggered a breakpoint.

This is the struct that is talking about:

USTRUCT(BlueprintType, Blueprintable)
struct FTakeDamageProperties
{
	GENERATED_USTRUCT_BODY()

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = DamageSystem)
	float DamageTaken;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = DamageSystem)
	AActor* Victim;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = DamageSystem)
	UHealthComponent* VictimHealth;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = DamageSystem)
	AController* VictimController;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = DamageSystem)
	AActor* Killer;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = DamageSystem)
	AController* KillerController;

};

The C++ code that broadcasts this event is this:

float UHealthComponent::TakeDamageType(float Damage, const class UDamageType* DamageType, class AController* InstigatedBy, AActor* DamageCauser)
{
	if (!bIsGodMode && Damage > 0.f && IsAlive())
	{
		FTakeDamageProperties TakeDamageProperties;
		TakeDamageProperties.Killer = DamageCauser;
		TakeDamageProperties.KillerController = InstigatedBy;
		TakeDamageProperties.VictimHealth = this;

		Health -= Damage;

		if (DamageType->bCausedByWorld)
		{
			bIsPoisoned = true;
			GetOwner()->GetWorldTimerManager().SetTimer(PoisonTimerHandle, this, &UHealthComponent::CurePoison, POISON_TIME_RECOVERY); //Loop each n seconds	
		}

		OnTakeDamageEvent.Broadcast(TakeDamageProperties);

		if (IsDead())
		{
			Die(Damage, DamageType, InstigatedBy, DamageCauser);//executed only once
		}
	}

	//Some debug if requested
	if (DebugDrawingHealth > 0)
	{
		const FString HealthMsg = FString::Printf(TEXT("Damage: %f, Current Health: %f"), Damage, Health);
		GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Green, HealthMsg);
	}

	return Damage;
}

The Delegate is declared like this:

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnTakeDamageDelegate, const FTakeDamageProperties, TakeDamageProperties);

And the blueprint event is:

And this is the Call stack:

I honestly don’t know what is wrong.
Thanks!