This chance thing needs to be rid of anyway. What if we only count the adjacent units of the target when dealing the final blow, and capture if there are 3 more "enemies" than "friends" adjacent to the target?
It works similarly to flanking calculations, but only counts the units surrounding the target.
X = target
Blue = units hostile to target
Red = units allied to target
Green = neutral units
Assume any of the blue melee unit is dealing the final blow on the target.
Enemies adjacent to the target (blue)
Friends adjacent to the target (red)
Yes, it doesn't matter where the adjacent units are
AI doesn't know about unit captures at all, but they pick off lone units and use flanks very well, so I think they can handle this without meaning to.
If this feels too hard for irregular terrain (e.g. lots of mountains or water), an alternative way is to count the number of adjacent tiles the target can end their turn in (embarkation doesn't count), and only capture if more than 50% of these tiles have target's enemies. This means it's easier to corner the enemy and capture it.