It looks like the I/O isn't thread safe - where I/O = any one of the modules that does I/O or a sensor. If one thread is using the I/O and another tries to do the same thing it get stepped on. Since the thing everyone wants to use is the I/O and there is ONE hardware bus, there should be one entrance into the routines that use it so it can be blocked for use by others until the I/O is complete and released when the current I/O is completed. The bus multiplexer code seems to be a spot that all I/O goes through and might be a good place to do this.
Am I stating this correctly or am I wrong on my assumptions?
Yes, it looks like you are stating it correctly. The problem is the I2C IO is being stepped on somewhere. It's supposed to be semaphore protected and we have hosed up somewhere. It's on our list to readdress this issue.
We will be issuing a new BugWeek Document next week.