You can clear up easy space by going to the tags and filtering by Unused and deleting anything there. Do it online so that if an HMI is using one, you won't be able to delete it. Do it for both controller-scoped and every program-scoped tag file.
I once had a SLC that was out of memory, and it was the largest model. Looking through the code, I found very inefficient uses of memory: data being moved from lots of different places instead of a single COP. I got to the point that I was even replacing MOV 0 <tag> with CLR <tag> instructions, because the former takes 3 words of memory (1 for the instruction, 1 for each element), while the latter takes only 2.
It was a PITA, but in the end, I wound up down to only 90% full, and a much more organized system.