If your query was a LINQ-to-Objects query, it would work correctly as-is, so I take it that you're querying a database via LINQ-to-SQL or Entity Framework.
In which case the solution is to insert .AsEnumerable()
into the query, so that the grouping and subsequent sorting happens on the client side:
tblAgentActivities
.Where (aa => aa.StartDate >= DateTime.Today)
.OrderBy (aa => aa.AgentActivityID)
.AsEnumerable()
.GroupBy (aa => aa.tblUser.FullName)
.OrderBy (aa => aa.Key)
Given that you're fetching all of the grouped data to the client, there's no performance penalty is grouping on the client rather than the server; in fact, you'll improve scalability by relieving the database server from some unnecessary burden.