I ran into the same problem before, and I suggest don't do like this:
TextureManager tm = TextureManager.getInstance();
tm.addTexture("A", texture_1);
obj.setTexture("A"); //set textureId to id_1
//do other things, like adding other textures, etc...
obj.setTexture("A");
tm.removeAndUnload(frameBuffer, "A");
tm.addTexture("A", texture_2); //add a new texture with the same name, and it has the id of id_2
//will set to the same textureId id_1, and this may be incorrect; The correct one is id_2
//maybe TextureManager.getTextureId(name) did some caching algorithms.
obj.setTexture("A");
//And then you will see the mismatched texture, because of the incorrect textureId.
But do like this:
TextureManager tm = TextureManager.getInstance();
tm.addTexture("A", texture_1);
obj.setTexture("A"); //set textureId to id_1
//do other things, like adding other textures, etc...
tm.replaceTexture("A", texture_2);