Can a TVF use multiple CTE statements internally?
Using the following cobbled-together-example, I'm able to utilize 3 different CTE's to work against the output table variable.  Perhaps you could identify the difference between your process and this simple example?

IF EXISTS (SELECT *
           FROM   sys.objects
           WHERE  object_id = OBJECT_ID(N'[dbo].[TEST_TVF_CTE]')
                  AND type IN ( N'FN', N'IF', N'TF', N'FS', N'FT' ))
  DROP FUNCTION [dbo].[TEST_TVF_CTE]

GO 
CREATE FUNCTION [dbo].[TEST_TVF_CTE] (@sInputList VARCHAR(8000))
RETURNS @OutTable TABLE (item VARCHAR(8000))

BEGIN
    WITH FIRSTCTE
    AS (
        SELECT TOP 1 TABLE_NAME
        FROM INFORMATION_SCHEMA.TABLES
        ORDER BY TABLE_NAME
        )
    INSERT INTO @OutTable
    SELECT *
    FROM FIRSTCTE;

    WITH SECONDCTE
    AS (
        SELECT TOP 1 TABLE_NAME
        FROM INFORMATION_SCHEMA.TABLES
        ORDER BY TABLE_NAME DESC
        )
    INSERT INTO @OutTable
    SELECT *
    FROM SECONDCTE;

    WITH FINALCTE
    AS (
        SELECT TOP 1 'XYZ' AS TABLE_NAME
        FROM INFORMATION_SCHEMA.TABLES
        ORDER BY TABLE_NAME DESC
        )
    UPDATE a
    SET a.item = b.table_name
    FROM @OutTable a
    JOIN FINALCTE b ON 1 = 1

    RETURN
END
GO

SELECT *
FROM DBO.TEST_tvf_cte('...')