After a bit of testing, I think I have determined the cause of this bug. It actually has nothing to do with how far away you are from the block. In fact, it seems to have something to do with a bug in Minecraft which has been fixed known as "click mining".
When you mine a row of blocks the "normal" way, standing directly in front of them and holding forward, the system works properly. Say you're mining a row of dirt blocks with a diamond shovel. There is a small amount of delay between each block's destruction and the next block destruction's beginning. If this is hard to understand, basically the arm has to swing back up before the next block can get hit, so there's a small amount of delay.
Someone discovered this and introduced "click mining" to the scene. All you did was release/repress the mouse button after each block was destroyed. This instantly returned the arm to the "unswung" position, eliminating the delay between each block's destruction. Notch figured this out and introduced a small delay after you press the mouse button down, so it negated the time advantage of click mining.
However, when doing the method you described, the block is broken before you're in range of the next block. So really, there's a small period between each dirt block where no block is in range. This instantly returns the shovel to the unswung postion, so there's no delay between blocks. The click mining fix only adds a delay after mouse presses, and this is not a mouse press, you're just holding it down, so there's no delay. Essentially, you've found a way around the click mining fix.
As for tall grass, it still works with grass on top of it. However, you must be aiming for the bottom of the block, because if the tall grass gets in range, the swing delay is reintroduced, leaving you with the delay again.
Long story short, yes, it's a bug. Still, it's sorta useful in select situations, but those situations are rare, so it's not a really big problem.
The answer you are looking for is hidden inside you own question: "there are a lot outside". The game randomly checks places to put mobs and since the outside is much larger than your trap, most of the zombie pigmen spawn there. The mob limit is exhausted pretty much instantly and the game doesn't spawn any more, unless some of the existing mobs de-spawn or get killed.
You will get zombie pigmen to spawn in your trap eventually, but you may have to wait hours for just a few spawns. You need to prevent spawning outside your trap to improve rates of your trap. This is very difficult to do in the nether, since you can't use light or water to prevent spawning. That is why you don't see zombie pigmen traps, building one is a monumental project. Notice for example here a huge area is covered with half-slabs to prevent spawning.
The spawnable area is +/- 8 chunks from each chunk where there is a player (minus the chunks on the edges of that area). If a single player is online, mobs spawn in 240x240 blocks area centered on the player chunk, that is roughly +/- 120 blocks from the player.
Best Answer
Mobs definitely do spawn on soul sand, the solid block requirement is for the block graphically, and soul sand graphically is a solid block (no transparency).
I did test it with a glass enclosed room with a soul sand floor and zombie pigmen did spawn inside.