When puppet stops the service it will kill the actual running puppet process.
Afterwards puppet does not do the start command.
You can solve this by using the following service resource:
service { 'puppet':
enable => true,
ensure => running,
restart => '/usr/bin/nohup /etc/init.d/puppet restart &',
}
This will fork a puppet restart command in background.