Somehow I completely missed this discussion. Someone pointed it out to me recently, so I'll go ahead and post an initial response for others.
There isn't anything that I know of in pyodbc that would cause this issue. Obviously Python threads running Python code do not run at the same time due to the "global interpreter lock" (GIL). However, pyodbc releases the lock before calling most database APIs. For example, in cursor.cpp you'll see:
Py_BEGIN_ALLOW_THREADS
ret = SQLExecute(cur->hstmt);
Py_END_ALLOW_THREADS
The THREADS macros release the lock so other Python threads can execute.
Any code before the actual cursor.execute call would not be in parallel, so it is possible that the two queries are not being reached at the same time?