For MapServer 5.0, the mapogr.cpp code was instrumented with locking to prevent concurrent calls into OGR. However, the previous assumption of mapogr.cpp was that operation was single threaded, so the OGR OpenShared?() call was used to optimize file access by avoiding unnecessary re-reads. In a multi-threaded situation the same OGR file handle is used by all threads, and more than one thread drawing or otherwise querying a file will result in massive confusion on who gets what features.
The minimum workaround is to comment out "#define USE_SHARED_ACCESS". The better solution would be to utilize mappool services to manage shared OGR handles since it knows how to ensure this is done only a per-thread basis.