Wait. To be clear, you were using threads, but now are only using the main thread and the issue still persists? If you weren't using threads before, what was the @synchronized block for?
Otherwise, I don't know of any bugs that would cause objects to not collide. Forgetting to return a value from a begin or preSolve callback is a good way to have random collision issues, but you said you disabled your handlers... Hrm. Other than checking to make sure the other collision filtering parameters (layers, groups) aren't ignoring the collision, I don't really know what to recommend.