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]);