You could also use (Thanks to ypercubeᵀᴹ for the fix)
SELECT GroupID,
SomeValue
FROM tablename
ORDER BY AVG(CASTFIRST_VALUE(0+CRYPT_GEN_RANDOMCRYPT_GEN_RANDOM(4) AS FLOAT)) OVER (PARTITION BY GroupID ORDER BY GroupID),
GroupID, --Just in case 2 groups get the same random number
SomeValue;
WITH T
AS (SELECT GroupID,
SomeValue,
CASE
WHEN ROW_NUMBER() OVER (PARTITION BY GroupID ORDER BY GroupID) = 1
THEN CRYPT_GEN_RANDOM(4)
END AS rand
FROM tablename)
SELECT GroupID,
SomeValue
FROM T
ORDER BY MAX(rand) OVER (PARTITION BY GroupID),
GroupID,
SomeValue;