[2008R2] Could use some help formulating an approach for a complex problem involving time zones, daylight savings time, and lots of dateadds.

This is where I'm at right now with the code. It "works" but it isn't correctly calculating UTC time and is giving me a final result set that seems to be offset by 2 hrs in such a way that it is including records that were created 2 hrs before we opened, and all the way up until 2 hrs before we close. Pretty sure I know why, just need to go through the cases to test my case calculations.

SELECT 
    CONVERT(VARCHAR, A.CreatedDate, 108)
    , *
FROM OPENQUERY([PRDREPORTS\PRD_COGNOS_RPT],'
    SELECT 
        V.ID AS ''LeadID''
        , V.Lead_Source_Code__C AS ''LSC''
        , W.StateName
        , V.CreatedDate
        , StartTime__c
        , V.Zip__C AS ''ZIP''
        , CASE
            WHEN W.DST = 1 
                AND V.CreatedDate BETWEEN X.DSTStart AND X.DSTEnd
                    THEN DATEADD(hh, (W.UTC*-1), V.CreatedDate)
            WHEN W.DST = 1
                AND V.CreatedDate NOT BETWEEN X.DSTStart AND X.DSTEnd
                    THEN DATEADD(hh, (W.UTC*-1)+1, V.CreatedDate)
            WHEN W.DST = 0
                THEN DATEADD(hh, (W.UTC*-1)-2, V.CreatedDate)
            END AS ''UTCCreatedDate''
        , CASE
            WHEN W.DST = 1 
                AND Z.StartTime__C BETWEEN X.DSTStart AND X.DSTEnd
                    THEN DATEADD(hh, (W.UTC*-1), Z.StartTime__C)
            WHEN W.DST = 1
                AND Z.StartTime__C NOT BETWEEN X.DSTStart AND X.DSTEnd
                    THEN DATEADD(hh, (W.UTC*-1)+1, Z.StartTime__C)
            WHEN W.DST = 0
                THEN DATEADD(hh, (W.UTC*-1), Z.StartTime__C)
            END AS ''UTCStartTime''
        , CASE
            WHEN V.CreatedDate BETWEEN X.DSTStart AND X.DSTEnd
                THEN DATEADD(hh, 5, OpenHour)
            ELSE DATEADD(hh, 6, OpenHour)
        END AS ''UTCOpenHour''
        , CASE
            WHEN V.CreatedDate BETWEEN X.DSTStart AND X.DSTEnd
                THEN DATEADD(hh, 5, CloseHour)
            ELSE DATEADD(hh, 6, CloseHour)
        END AS ''UTCCloseHour''
    FROM [PRDREPORTS\PRD_COGNOS_RPT].[SalesforcePRD].dbo.Lead V
    INNER JOIN [PRDSQLDM01\PRD_DMAIL].[Digital].dbo.DSU_Params_ZipCodes W
        ON W.ZIP = LEFT(V.ZIP__c,5)
    INNER JOIN [PRDSQLDM01\PRD_DMAIL].[Digital].dbo.DSU_Params_DST X 
        ON X.DSTYear = YEAR(V.CreatedDate)
    INNER JOIN [PRDSQLDM01\PRD_DMAIL].[Digital].dbo.DSU_Params_HoursOfOperation Y
        ON Y.DOW = DATEPART(dw, V.Createddate)
    INNER JOIN (
        SELECT 
            ROW_NUMBER() OVER(PARTITION BY Lead_ID__c ORDER BY StartTime__c) AS ''AttemptNumber''
            , Lead_ID__c
            , StartTime__c
        FROM [PRDREPORTS\PRD_COGNOS_RPT].[SalesforcePRD].dbo.OutboundCall__c
        WHERE 
            AttemptCount__c = 1 
            AND AttemptComplete__c = ''true''
            AND Lead_ID__c IS NOT NULL 
            AND StartTime__c IS NOT NULL
    ) Z
        ON Z.Lead_ID__C = V.ID AND Z.AttemptNumber = 1
    WHERE 
        YEAR(V.CreatedDate) >= ''2015''
        AND W.StateName NOT IN (''HI'', ''AK'')
        AND CAST(V.CreatedDate AS date) NOT IN (SELECT CAST(Holiday AS date)
                                                FROM [PRDSQLDM01\PRD_DMAIL].[Digital].dbo.DSU_Params_Holidays)
') A

WHERE 
    A.UTCCreatedDate 
        BETWEEN 
            DATEADD(DAY, 0, DATEDIFF(DAY, 0, CAST(A.UTCCreatedDate AS date))) + DATEADD(DAY, 0 - DATEDIFF(DAY, 0, A.UTCOpenHour), A.UTCOpenHour) 
        AND 
            CASE
                WHEN CAST(DATEADD(hh, DATEDIFF(hh, UTCCloseHour, UTCOpenHour), UTCCreatedDate) AS date) > CAST(UTCCreatedDate AS date)
                    THEN DATEADD(DAY, 0, DATEDIFF(DAY, 0, CAST(A.UTCCreatedDate AS date))) + DATEADD(DAY, 0 - DATEDIFF(DAY, 0, A.UTCOpenHour), A.UTCOpenHour)
                ELSE DATEADD(DAY, 0, DATEDIFF(DAY, 0, CAST(DATEADD(DAY, 1, A.UTCCreatedDate) AS date))) + DATEADD(DAY, 0 - DATEDIFF(DAY, 0, A.UTCCloseHour), A.UTCCloseHour)
            END
ORDER BY CONVERT(VARCHAR, A.CreatedDate, 108)
/r/SQL Thread Parent