Howdy.
Is it just me or did this used to be a lot easier in earlier versions of PS? |
It's not just you. It's pretty easy in CS3.

The screenshot is after Ctrl+A has been applied. The Contract command is still active. And the selection will not be feathered.
According to MTSTUNER's link (thank you), CS3 is the only version that will do this. Sometimes it's good to be behind the curve.
Maybe the referenced script will fix you up. I don't know anything about scripts, but I do know a little about actions. So out of curiousity, I hacked together an action which should work in CS5. It's based on expanding the canvas, contracting the selection, then cropping back to the original size. It looks like a long way to go to accomplish something so simple, but Ps does it all in the blink of an eye.

1. Merge Visible (Ctl+Alt+Shft). This creates a proxy for the original image size after the canvas is enlarged. This layer will be deleted at the end of the action.
.
2. Canvas Size. I set it to 105% in both axis. The percentage doesn't matter, as long as it's more than 100. The point it to get the canvas border away from the proxy border.
3. Set Selection. Ctl +Click on the thumbnail on the proxy layer. This will select the perimeter of the proxy layer, which is the same as the original canvas.
4. Contract. Menu>Select>Modify>Contract. Enter the number of pixels. This can be changed later. As you can see in the screen shot above, I have made this a conditional action. It will stop here for you to approve or change the settings. When you hit enter, the action continues.
5. Layer Via Copy. This layer preserves the contracted selection. It's really being used as a channel. This layer will also be deleted at the end of the action.
6. Set Selection. Ctl+Click on the thumbnail for the Merge Visible layer from step 1.
7. Crop. Menu>Image>Crop. The image is now the original size.
8. Set Selection. Ctl+Click on the layer thumbnail created in step 5. You should now be looking at the contracted selection. We're done, except for a little housecleaning below.
9. Delete. Delete the top layer, which should be the contracted channel. (This doesn't affect the selection.)
10. Delete. Delete the top layer, which should be the Stamp Visible layer. Now we're back where we started, but we have a contracted selection.
Stop Recording.
It may look ridiculous on paper, but it works like a charm, so far as I've tested it. And the beauty of actions is you only have to make them once. No matter how much trouble they are.
Once the action is made, it's quick and easy to use. Just click on the action button.

The contract pixel dialog box appears.

OK or change and OK, and you're done. The selection appears at the desired location, and is not feathered. In practice, the only downside is you get a few extra history states.
You get where you're going, and you get there quick. So quick no one will notice you got there via Paris, London, and El Paso.
I'm not 100% sure this will work in CS5, as I've never laid eyes on it, but the issue seems to be that when the selection touches the canvas border, Contract Selection is not available. Nowhere in the action does a selection touch the canvas border, so it should work the same as it does in my CS3. If you're interested in testing it, I can send you the Droplet, or you can create it from scratch using the instructions above.
Anyway, that's all I got, and it could all be wrong. 
Peace,
Lee