Somehow, I ended up with entries in SourceControl.Git.DeploymentLog where End Timestamp and Status are both blank:
SELECT *
FROM SourceControl_Git.DeploymentLog
WHERE EndTimestamp IS NULL
If a pull handler's OnPull() method ever throws an error, that information is not captured in the Deployment Log record, but it is returned and communicated back the call chain.
I do not know if this is related to #907 or not. Also, it is a little confusing that ForModifications() can return either the thrown exception OR the value of %OnSave().