A player by the name of RETIRE joined the M&L Discord server a few days ago. He is an experienced glitch hunter in other communities such as SM64DS. He was interested in figuring out what caused Barrel Storage in combination with Sign Glitch to make the game unable to set our action commands to the proper ones. Over the course of a few days this is what he discovered.
There is a variable at $2440 and $2430 in IWRAM that keeps track of the action commands for Luigi and Mario respectively. Normally, when you break out of a barrel, without doing Barrel Storage, the game simply sets the third byte in $2440 to FF. But how it does that is pretty interesting; it copies the third byte to the first byte, and then it copies the fourth byte to the 3rd byte. The first byte is the action command of Luigi when he is in front. When you're inside of the barrel, the third byte is usually 00, and when you're not inside the barrel the byte is FF instead. With barrel storage however, you are inside the barrel, but the third byte is set to FF. Now, if you break out of the barrel, like I said, the third byte gets copied to the first byte, meaning the first byte is now also FF, which means Luigi will have the blank action command on his A button.
So the question then becomes: what happens if we now talk to the sign? Well, if we talk to the sign, the first byte is changed to 00. But again, the game handles this a bit differently; what is actually happening is the first byte is copied to the fourth byte, and it sets the first byte to 00. A very important note to make is that the first byte is copied to the fourth byte
before the interaction with the sign, which means even though the first byte is set to 00, the fourth byte is still FF. Because the fourth byte is FF, it will keep the action command of talking to the sign even if you get away from it.
Now let's go back to the variable at $2430: the first byte there is set to 02, which means you should be talking to a sign, but you still have the normal Jump. However, after you switch, this byte is responsible for being able to change action commands past its intended limit.
Here is a video by RETIRE demonstrating everything that I wrote here.