There are a few reasons why you may have underpaid:
1) You entered in the dollar amount instead of the requested Bitcoin amount into your wallet. Since rates can vary slightly among wallets and services, entering the requested Bitcoin amount instead of the dollar amount will ensure the correct amount transfers.
2) You used a Bitcoin Exchange. Exchanges usually deduct fees from payments at different rates than typical Bitcoin wallets.
3) You paid no or a low fee. Since miners are incentivized to confirm payments by miner fees, not including a fee or paying a low fee may cause the transaction to be delayed. If payment is not confirmed in 15 minutes, the transaction will be at new Bitcoin rates.