To this post I'm attaching excerpt from the log. It's the above situation. The lines start at the point when the enemy moves into adjacent tile and the game decides Ray is gonna get Overwatch attack. And it ends at the point where the first error occurrences start happening. Still before the next unit acts.
The reason is, it would be much more apparent to you what's happening, when taking a look at events there.
What is suspicious to me is that there are some lines called more times. As if the overwatch was resolved twice or so. There was end turn called in between.
For example CTH part:
The first time:OverwatchManager.AttemptOverwatchAttackForThisMovement. Distance between melee overwatching Ray Case and moving: Ray Case is: 1 -> Checking if melee attack can be made
CharMainScript.SetupMeleeAttack. Body part damage modifier: 1 / is overwatch attack: True / is AOO: False
CharacterMainScript.SetupMeleeAttack. Character Ana Stuurman is not already on list. Adding
BattleControlScript.GetMeleeChanceToHit. defender wound level: 2, increasing CTH by: 10
BCS.GetMeleeCTH. Attacker Melee Skill: 49 / defence from melee 21 / defense from armour 0 / defense from evasion: 6 / attack rating: 1.814815 / melee multiplier: 37.5 bodyPart CTH Multipler:1 use mode CTH multiplier:1 / final chance to hit: 78
CharacterMainScript.SetupMeleeAttack. This is an unarmed attack
CharMainScript.SetupMeleeAttack. Attack damage is: 8.481825 defender HP: 3.613329
The second time:OverwatchManager.AttemptOverwatchAttackForThisMovement. Distance between melee overwatching Ray Case and moving: Ray Case is: 1 -> Checking if melee attack can be made
CharMainScript.SetupMeleeAttack. Body part damage modifier: 1 / is overwatch attack: True / is AOO: False
BattleControlScript.GetMeleeChanceToHit. defender wound level: 2, increasing CTH by: 10
BCS.GetMeleeCTH. Attacker Melee Skill: 49 / defence from melee 21 / defense from armour 0 / defense from evasion: 6 / attack rating: 1.814815 / melee multiplier: 37.5 bodyPart CTH Multipler:1 use mode CTH multiplier:1 / final chance to hit: 78
CharacterMainScript.SetupMeleeAttack. This is an unarmed attack
CharMainScript.SetupMeleeAttack. Attack damage is: 8.481825 defender HP: 0
You can see other lines more times, like: CharacterMainScript.StartMeleeAttack. Method called. Is overwatch attack: True / is AOO: False
And many others...
Not sure what some do, like (2x with true/true, 4x with false/false):
OverwatchManager.SetOverwatchBeingResolved. Current state: True / new state: True
Perhaps the game just calls some functions more times for different reasons. I don't know. Could be completely ok.
But just in case, if there is really something called twice (or more times) and shouldn't, then it may as well be that some boolean/state was not set properly in case there is some loop, or anything else, and overwatch not closed. One would then get the null exceptions as things aren't as before anymore.
The issue doesn't look like being related to enemy removal event though, as when it happens as the looped animation bug, the enemy doesn't fall under this category. But there could be more problems at play, of course.
I didn't see more than one attack, but it happened fast.