Sí, tendrías una condición de carrera.
Una forma de gestionar esto es tener sp_getapplock después de BEGIN TRAN en el modo de transacción y capturar/manejar el estado de devolución según sea necesario. Esto literalmente serializará (en el sentido de ejecución, no de aislamiento) a las personas que llaman, de modo que solo se ejecute un SPID a la vez.