Sim, você teria uma condição de corrida.
Uma maneira de gerenciar isso é ter sp_getapplock após BEGIN TRAN no modo de transação e intercepte/trate o status de retorno conforme necessário. Isso literalmente serializará (no sentido de execução, não no isolamento) os chamadores para que apenas um SPID seja executado por vez.