• So, is this what you are looking for?

    IF OBJECT_ID('dbo.TestTable','U') IS NOT NULL
      DROP TABLE [dbo].[TestTable];

    CREATE TABLE [dbo].[TestTable](
      [name] VARCHAR(30)
      , [ShiftType] VARCHAR(30)
      , [SundayShiftDate] DATE);

    INSERT INTO [dbo].[TestTable]([name],[ShiftType],[SundayShiftDate])
    VALUES ('Graham','Late','2017-10-22')
           ,('Graham','Late','2017-10-29')
           ,('Graham','Late','2017-11-05')
           ,('Graham','Morning','2017-11-12')
           ,('Graham','Afternoon','2017-11-19')
           ,('Graham','Afternoon','2017-11-26')
           ,('Graham','Afternoon','2017-12-03')
           ,('Graham','Late','2017-12-10')
           ,('Graham','Late','2017-12-17');

    SELECT [tt].[name], [tt].[ShiftType], [tt].[SundayShiftDate] FROM [dbo].[TestTable] AS [tt];

    WITH base AS (
    SELECT
      [tt].[name]
      , [tt].[ShiftType]
      , [tt].[SundayShiftDate]
      , [rn] = ROW_NUMBER() OVER (PARTITION BY [tt].[name], [tt].[ShiftType] ORDER BY [tt].[SundayShiftDate])
    FROM
      [dbo].[TestTable] AS [tt]
    ), Interim AS (
    SELECT
      .[name]
      , .[ShiftType]
      , .[SundayShiftDate]
      , [GroupDate] = DATEADD(DAY,-(7 * [rn]), .[SundayShiftDate])
    FROM
      [base] AS
    )
    SELECT
      .[name]
      , .[ShiftType]
      , [From] = MIN(.[SundayShiftDate])
      , [To] = MAX(.[SundayShiftDate])
    FROM
      [Interim] AS
    GROUP BY
      .[name]
      , .[ShiftType]
      , .[GroupDate]
    ORDER BY
      .[name]
      , MIN(.[GroupDate]);