Based on a bug report from 2004 at https://mail-index.netbsd.org/current-users/2004/06/19/0002.html, the solution is as follows:
A blank line needs to be introduced between the setting of the A record and the setting of the PTR record, like this:
server dns01.example.com
update delete pup01.example.com. A
update add pup01.example.com. 300 A 172.29.207.209
[blank line goes here]
update delete 209.207.29.172.in-addr.arpa. PTR
update add 209.207.29.172.in-addr.arpa. 300 PTR pup01.example.com.
send
This results in the following in the log:
Sep 23 14:40:12 dns01 named[1070]: client 172.29.207.209#36127/key example.com: view example.com-default: updating zone 'example.com/IN': deleting rrset at 'pup01.example.com' A
Sep 23 14:40:12 dns01 named[1070]: client 172.29.207.209#36127/key example.com: view example.com-default: updating zone 'example.com/IN': adding an RR at 'pup01.example.com' A
Sep 23 14:40:12 dns01 named[1070]: client 172.29.207.209#36127/key example.com: view example.com-default: updating zone '29.172.in-addr.arpa/IN': deleting rrset at '209.207.29.172.in-addr.arpa' PTR
Sep 23 14:40:12 dns01 named[1070]: client 172.29.207.209#36127/key example.com: view example.com-default: updating zone '29.172.in-addr.arpa/IN': adding an RR at '209.207.29.172.in-addr.arpa' PTR
Hopefully this saves someone some time.