Probably not, the reason being that due to to nature of processes, usually everything is run in sequence.
Say that the game thread looks like this:
run () {
while (game_is_running) {
if smough_is_defeated then //this is special logic only used in this boss battle
ornstein absorbs smough
else if ornstein_is_defeated
smough absorbs ornstein
do everything else
game_logic //moving, collision detection, applying impulses
render //that is, if they choose to render in the logic process
let process sleep for 10 miliseconds
}
}
The sequential nature of this means that even if they die in the same logic loop, one would still do the check before the other, meaning that the other one would not get the chance to perform that check, because it would be removed from the logic loop.
Naturally, they could have an other setup, they could have one process for every entity (player, enemy) that each run their own logic, and use a main process as a intermediary ground for race condition checks and what not (probably not because it's not like it improves performance, and it's FUCKING complicated! They do this kind of things for special cases, even so, if they are implementing proper race conditions checks, Ornstein should not be able to absorb Smough, while Smough is simultaneously checking the state of Ornstein)
The music in that boss battle is the best in the entire game (imo).