I would probably break this into two steps - which won't actually mean that anything gets executed any earlier, but it's simpler to understand.
// For each week, yield a sequence of winning results
var winningResultsByWeek = from result in results
group result by result.Week into week
let winningScore = week.Max(x => x.Points)
select week.Where(x => x.Points == winningScore)
var winsPerPlayer = from winningResults in winningResultsByWeek
from winningResult in winningResults
group winningResult by winningResult.Player into winsByPlayer
select new { Player = winsByPlayer.Key,
Count = winsByPlayer.Count() };
The naming is very important here - hopefully by spelling things out I've made it reasonably clear. I'm sure there are other ways of doing it of course, but that's the clearest one I've thought of.