I found a successful, albeit kludgy, workaround. Add a dummy column to EmployeeReview table populated with 1. A join on it behaves like a cross join, but is executed like an inner join. Not an ideal implementation, but it works.
SELECT
Employees.EmployeeID,
Employees.[% of Positive],
SUM(CASE WHEN Employees.[% of Positive] < Groups.[% of Positive] THEN 1 ELSE 0 END) + 1 [Rank]
FROM
(
SELECT
JoinKey,
EmployeeReview.EmployeeID,
CAST(SUM(IsPositive) AS DECIMAL(19,5)) / CAST(SUM(1) AS DECIMAL(19,5)) AS [% of Positive]
FROM
dbo.EmployeeReview JOIN
dbo.Employee ON EmployeeReview.EmployeeID = Employee.EmployeeID
WHERE
GroupID = 1
GROUP BY
JoinKey,
EmployeeReview.EmployeeID
) Employees
JOIN
(
SELECT
JoinKey,
GroupID,
CAST(SUM(IsPositive) AS DECIMAL(19,5)) / CAST(SUM(1) AS DECIMAL(19,5)) AS [% of Positive]
FROM
dbo.EmployeeReview JOIN
dbo.Employee ON EmployeeReview.EmployeeID = Employee.EmployeeID
GROUP BY
JoinKey,
GroupID
) Groups ON Employees.JoinKey = Groups.JoinKey
GROUP BY
Employees.EmployeeID,
Employees.[% of Positive]