I think that you're overcomplicating it. This gives the results that you're looking for without any loops.
INSERT PolicyReviewLocks(PolicyNumber, UserID)
SELECT DISTINCT pr.PolicyNumber, @User
FROM PolicyReviews pr
INNER JOIN PolicyReviewStatus prs
ON prs.ReviewID = pr.ReviewID
WHERE prs.Status = 'P'
AND NOT EXISTS (
SELECT 1
FROM PolicyReviewLocks prl
WHERE prl.PolicyNumber = pr.PolicyNumber
)
SELECT *
FROM PolicyReviewLocks prl
Drew
J. Drew Allen
Business Intelligence Analyst
Philadelphia, PA