The issue happens occurs when you instantiate a GameObject that is already in the scene. It reuses the same meshcollider for performance. If you change your Instantiate code to something like this, it should work reliably - but please remember that its quite expensive to create meshcolliders on the fly, you want to cache/pool as many of these as possible rather than deleting them and recreating them later.
if (sourcePrefab != null) {
MeshCollider mc = sourcePrefab.GetComponent<MeshCollider>();
if (mc != null) {
mc.sharedMesh = null;
}
tk2dBaseSprite sprite = sourcePrefab.GetComponent<tk2dBaseSprite>();
if (sprite != null) {
if (sprite.meshColliderMesh != null) {
Destroy(sprite.meshColliderMesh);
sprite.meshColliderMesh = null;
}
}
GameObject g = Instantiate (sourcePrefab) as GameObject;
}
}