@Matt Dyer, The problem is it involves multiple different service layers and currently not all the logic is SQL Server-based, so it would require a lot of refactoring.
As I put in the main thread, I found a hacky workaround by using a transaction block in the CFML, but then immediately flushing commit statements after updates (as long as the code is not in a nested transaction). This at least prevents the table locking issues (which is what i was trying to avoid) and since it's within a transaction block, all the queries come through the same SPID.