In general.
This is absolutely weird coding. Adding something to the array should be done once, and on the moment you add something to a cell. The same goes for removing. Now you add something to the array each tick. Because 'is overlapping condition' is true every tick that there is something on that cell. On the other hand 'is not overlapping' is true every tick that there is not something above the cell.
This kind of stuff, checking overlaps every tick, will slowwww dowwnnnnn your game to the extreme.
There should be no new code block for each cell. This is easily done with 1 code block for all cells, because they are instances comparing to 1 family.
Specific.
Event 4.
Items is overlapping casilla. This is a pick condition. A pick condition makes a list of all instances/objects that meet the condition. Lets call this list the picklist. Now, 'Items is overlapping casilla' picks all items, every single member of the family items that overlaps with any casilla. At this moment the picklist contains all items and all casilla.
'celda = 1" keeps from that picklist those cassila with celda = 1. Now the picklist contains ALL items and ONE casilla. The actions will run on this picklist.
So if you use items.tipo in an action, which items will it use ? You did not specify an items. You feed all items to that action and expect C2 to gamble wich items it should use for items.tipo.
Sorry if i sound harsh. I already apologise.
But you should follow a few more tutorials about using 'instances' and 'familys'.