I have the exact same challenge as Jumper, but have gone one step further. I have incorporated the shipping fees into the product pricing, based on destination. This should lessen cart abandonment as there is no surprise at checkout with excessive shipping charges added there.
I could use PayPal's standard drop-down menu for options. However, graphically, I feel that a radio button set is a better choice for the user. I am using a hosted button (which could be part of the problem).
Here is what I have (and it does renders exactly the way I want ...
<form target="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="xxxxxxxxxxx">
<table>
<tr><td><input type="hidden" name="on0" value="Shipping"Shipping</td></tr>
<tr><td>
<input type="radio" name="os0" value="Canada">Canada $9.00<br/>
<input type="radio" name="os0" <value="United States">United States $9.00<br/>
<input type="radio" name="os0" <value="International">International $11.00<br/><br/>
</select> </td></tr>
</table>
<input type="hidden" name="currency_code" value="CAD">
<input type="image" src="https://www.paypalobjects.com/WEBSCR-640-20110306-1/en_US/i/btn/btn_cart_LG.gif" border="0" align="right" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/WEBSCR-640-20110306-1/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
PayPal is complaining about a website error, but I'm not sure what I'm missing.