Tagging is cheap, and takes almost no space in repository. I wouldn't worry about having extra project in some tag folder, but you can always remove extra projects after the tagging.
That being said, I actually prefer the first approach, because you have more freedom there. Freedom comes with a price, but the price here is small.
EDIT: Tagging and branching are essentially the same operation in SVN. When you branch some folder you are creating a snapshot-copy of that folder. This "snapshot" part is important, because any changes in original folder will stay there, and will not propagate to branched folder. Only difference between tag and branch is that SVN client will warn you about changing something in folder whose path contains "tag".
So, any of the two options is tag-safe in regard to the issue of changing the contents after the tag. Tag folder will not be changed, only the folder where you actually made the changes.
EDIT2: You may consider a third option:
Modules
branches/tags/trunk
Project_1
branches/tags/trunk
Project_2
branches/tags/trunk
Solutions
Solution_1
branches/tags/trunk
svn:externals : Modules + Project_1
Solution_2
branches/tags/trunk
svn:externals : Modules + Project_1
Your working folders are Solutions/Solution_1/trunk
and Solutions/Solution_2/trunk
. Those folders are essentially empty, but they contain svn:externals
property that is set up to appropriate trunk folders. When you want to branch or tag something you make branches in Modules/Project_X folders, and then make a branch in Solution_X folder with svn:externals
property changed to new appropriate folders. Tagging is the same as branching, but you would "fix" the revision of every external.