The only thing we can think of that has changed is that we upgraded all of our clusters to AOS 5.5.2 over the last couple of weeks.
Has anything changed between 5.1.x and 5.5.2 which might affect this?
The Powershell script is very, very basic, in essence it just does:
Add-NTNXProtectionDomain -value $thispdname
Add-NTNXProtectionDomainVM -pdname $thispd -consistencygroupname $thiscg -Names $thisvm
Add-NTNXProtectionDomainCronSchedule -pdname $thispd -Type HOURLY -EveryNth 12 -UserStartTimeInUsecs $thissnap
Set-NTNXProtectionDomainRetentionPolicy -pdname $thispd -id $schedid -LocalMaxSnapshots 7
...with a tiny bit more error-checking.

As I say, it's worked for about a year and has just started to fail with a 500 Internal Server Error:
CategoryInfo : InvalidArgument: (Nutanix.Prism.Common.NutanixCluster:NutanixCluster) [Add-NTNXProtectionDomainCronSchedule], WebException
FullyQualifiedErrorId : {"message":"java.lang.NullPointerException"},Nutanix.Prism.PS.Cmds.Dr.AddProtectionDomainCronSchedule