graceful-stop seems to be a modest improvement but its not a panacea. AFAIK it only ensures that open connections are not dropped. A puppet run seems to involve multiple connections. At best this only completes individual transactions before shutdown. Also, when I look at this problem in a bit more detail, the puppetmaster doesn't seem to know if there are active puppet runs still in progress.
So the best I could hope for is a way to block new puppet runs from starting and then waiting a reasonable length of time before halting the service. Is there anything in the puppetmaster arsenal that could allow it to run without allowing new puppet runs to start?