Is there a way that my PHP code can generate an encrypted BuyNow button that also includes custom fields and also implements an IPN URL and redirect page?
You don't have to encrypt. Simply take the 'custom' variable, and, among other things you might need to put in there, add a hash of the price and product number, like so:
$sCustom .= '|' . md5($sSalt . $sProduct . $sPrice);
Then, when the IPN is processed, ensure that this hash was not disturbed with what is received back. If it was, then block the transaction.
in the encrypted buttons theres is one field called 'custom', you can serialize an array into it and it will be returned to your IPN :)