Make sure the variables you are using to identify the matrices update after Matrix 1 is deleted, and Matrix 2 is Reloaded (hehe pun intended). The easiest way to do this is as follows (not code, just a general idea)
1: Main Loop
First thing in the main loop, variables identifying current matrix are declared, and another set of variables are declared. Next, simply type for each variable that the first set = the second set. Now use the first set only throughout the main loop. Have the second set shared all the way through the chain, by the functions.
2: Matrix loading.
Update the second set here, and make sure it is shared! This can be done simply by using the matrix ID number.
Now, whenever control is passed back to the main loop, the set of variables used to identify your matrix, and objects withing, is automatically upated, and all collision should work.
Nine times out of ten when your code is correct, but something don't work, it's simply the organization of your data. It's good to follow your code through, variable by variable, noting what their values will end up being, just to make sure that everything is done in the right order. It can be a headache rearranging things, and it is even sometimes impossible. This is why it's good to draw up a well though out flow chart for your program before you ever write a single piece of code.
Coding:
97% Organization
1% Knowledge
2% Cheese
Made from all natural synthetic ingredients.