OK here is the cause of the problem:
Code file: EventPPEnroll.ascx.vb
Line numbers: 96-105
Line 96 takes the Event fee formats it as a currency string and places it in the label for the fee.
lblFee.Text = String.Format("{0:c}", EventEvent.EnrollFee)
Line 104 then takes the string from the event fee label and runs it through the VB function "Val"
dblTotal = Val(lblFee.Text)
This function (Val) parses the string looking for a valid number. The VB documentation states that it stops parsing at the first non-numeric character. In this case it will stop at the leading "$" (assuming USD) thereby the returned value will be 0.
Line 105 then formats as currency and assigns the value to the Total Label.
lblTotal.Text = Format(dblTotal, "#,##0.00")
The total value becomes 0 because the Val function was mis-used. This is then the value that is passed to PayPal.
To correct this I simply changed the formatting on line 96 to show a simple two place decimal.
lblFee.Text = String.Format("{0:#.00}", EventEvent.EnrollFee)
Because there is a currency designator being put after the event amount there doesn't seem to be a reason to format the enrollment fee as currency.
Not sure if this is the best solution but is the simplest and seems to work well in my environment.
FYI.. I also made changes to pick up the PayPal URL from the web.config rather than have it hardcoded in the module. This way I can change the path to use PayPal's sandbox and actually run thorough tests on my sites. My "fix" for this is quick and dirty I would recommend taking this much farther by putting it in a DNN table someplace so that when PayPal changes their settings we don't have to wait for an upgraded module. Actually if done right this module could be used with a variety of payment processors.