What is the output of @SQL before you convert it to XML?
DECLARE @sql Nvarchar(max)
SET @sql = '<Data Extract>'
SET @sql = @sql + (SELECT Top 2 FirstName, LastName
FROM
[dbo].[CandPersonal] pe
INNER JOIN CandProfile pr on pe.CandId = pr.Id
WHERE pr.isGraduateApplicant = '1'
FOR XML PATH('Candidate'), ROOT('Graduates'))
SET @sql = @sql + (SELECT Top 2 FirstName, LastName
FROM
[dbo].[CandPersonal] pe
INNER JOIN CandProfile pr on pe.CandId = pr.Id
WHERE pr.isGraduateApplicant = '0'
FOR XML PATH('Candidate'), ROOT('ExperiencedHires'))
SET @sql = @sql + '/<Data Extract>'
SELECT @SQL