I would suggest two things - first, aliasing your tables so that you can read the SQL easier. Once aliased and structured, your current query looks like this.
Code:
SELECT
RT.RefID,
RT.LastName,
RT.FirstName,
G8.Total_Matches,
G8.[Total Points],
G8.FitTestBonus,
RR.[Highest Ref Assignment ID],
RR.[Highes Ref Difficulty Score],
RR.[Highes Ref League],
RR.[Highest Ref Match],
RR.GameDate,
RAR.[Highest AR Assignment ID],
RAR.[Highes AR Difficulty Score],
RAR.[Highes AR League],
RAR.[Highest AR Match],
RAR.GameDate
FROM
([Report REF] AS RR
INNER JOIN
([Report AR] AS RAR
INNER JOIN
(Referee_T AS RT
INNER JOIN
Officiated_Matches_T AS OT
ON RT.RefID = OT.RefID)
ON RAR.RefID = RT.RefID)
ON RR.RefID = RT.RefID)
INNER JOIN
[Grade 8 Top 100 with Bonus applied] AS G8
ON RT.RefID = G8.RefID;
Second, to get rid of your duplicates, you will use GROUP BY and an aggregate function, probably either MAX or FIRST, whichever is appropriate. MAX gets you the highest of something that is found in the group of records, and FIRST gives you the first one encountered. (There's a MIN, AVG, LAST and so on as well.)
I'd need to see the SQL for the queries [Report REF] and [Report AR] to know where you need them. If you needed to use the exact game that had the highest difficulty level, you'd use FIRST to have Access pick one of them at random. If you just needed the highest difficulty level, but didn't need to know which game it was, then you'd use MAX against all the calculated difficulties for each ref.