Take the triggering event of char out of the loop and run the loop one time like you are picking up an item, there's too much happening like the char overlapping the item while the loop is running, should be very simple like char picks up item then you trigger the loop and with the first sub event, where the loop is assigning the item to a slot only.
To check if all slots are filled you can do if itemslot=none and run the normal pick up item loop only if itemslot.pickedcount > 0, then 'Else' means there are no empty slots you can run a different function, the swapping mechanism though this wasn't mentioned before.
For swapping item it depends how you want to do it and needs to be designed first on when you would swap and how and which slots are picked.