Aside from the design consideration, the 2nd approach where you render the boxes all within the same effect would probably be more efficient. Switching effects is an expensive operation, so by rendering everything within one effect's Begin() and End() you can save quite a bit of performance (for more info on operations costs,
go here).
Note that once you've called pass.Begin(), you'll have to call effect.CommitChanges() to actually apply changes to the effect (for example when setting other world matrices or textures for different models).
The effect passes primarily serve to divide your effect code into multiple chunks. This is useful for legacy reasons back when shaders could only support few instructions/registers per pass, but it also comes in handy for organizing your shader code. It's good form to support multiple passes in your C# rendering code, so you don't have to rework things if you switch to an effect with multiple passes, but typically they only see some specialist use.