The most common reason we are seeing the Benefit, Deduction and/or Pay Code amounts appearing as doubled on the W-2 is as follows:

The Benefit, Deduction and/or Pay Code contain the same W-2 Box and W-2 Label more than once.  To verify if this is your situation, please check out the following:

A. Benefit:

Open the HR and Payroll Navigation Pane. On the Cards menu, select Benefit.  In the Employee Benefit Maintenance window, select the Employee ID and the Benefit Code.  We have four boxes available to enter box and label information.  Click the W-2 Box field’s right scrolling arrow.  Does the value change to 0 or a different value for the W-2 Box and blank or a different value for the W-2 Label?  If not, you probably have the same W-2 Box and W-2 Label entered more than once for this specific Employee ID and Benefit Code.  

Note: If this Benefit has the same W-2 Box and W-2 Label entered more than once for a benefit it shouldn’t be, you can change it at the Benefit Setup (on the Setup menu, select Benefit) level and roll down your changes.  Before making a change at the Benefit Setup level and rolling down the changes in the live company, make sure you make a complete restorable backup in case there is any unwanted data changes and/or losses.  You could set up a test company to verify your testing as well.  Here is a KB on how to do this:

885542  How to create a test or historical company in Payroll or in Canadian Payroll in Microsoft Dynamics GP
http://support.microsoft.com/kb/885542/en-US

You could also look at the UPR00600 table (Payroll Benefit Master).  This table is what the Employee Benefit Maintenance window pulls from.  For example, in SQL Server Management Studio, you could run the following select statement against the company database:

select W2BXNMBR, W2BXLABL,
       W2BXNMBR2, W2BXLABL2,
       W2BXNMBR3, W2BXLABL3,
       W2BXNMBR4, W2BXLABL4, x.*
from UPR00600 x
inner join (select EMPLOYID, BENEFIT from       
              (select EMPLOYID, BENEFIT, cast(W2BXNMBR as char(50))+W2BXLABL as CombinedStr from UPR00600 a where W2BXNMBR <> 0
              union all
              select EMPLOYID, BENEFIT, cast(W2BXNMBR2 as char(50))+W2BXLABL2 as CombinedStr from UPR00600 b where W2BXNMBR2 <> 0
              union all
              select EMPLOYID, BENEFIT, cast(W2BXNMBR3 as char(50))+W2BXLABL3 as CombinedStr from UPR00600 c where W2BXNMBR3 <> 0
              union all
              select EMPLOYID, BENEFIT, cast(W2BXNMBR4 as char(50))+W2BXLABL4 as CombinedStr from UPR00600 d where W2BXNMBR4 <> 0) e
              group by EMPLOYID, BENEFIT, CombinedStr
              having count(*) > 1) y
              on x.EMPLOYID = y.EMPLOYID and x.BENEFIT = y.BENEFIT


If you find values returned that are not supposed to have duplicates, here is a specific update statement for the scenario where first W-2 Box and W-2 Label and second W-2 Box and W-2 Label are the duplicated and the second W-2 Box and W-2 Label are supposed to be blank.  

update UPR00600
set W2BXNMBR2 = '', W2BXLABL2 = ''
where ((W2BXNMBR=W2BXNMBR2) and (W2BXLABL=W2BXLABL2))
and W2BXNMBR > ''
and W2BXLABL > ''
and DEX_ROW_ID = XXX

Replace XXX with the DEX_ROW_ID of the record that needs to be updated.

B. Deduction:

Open the HR and Payroll Navigation Pane. On the Cards menu, select Deduction.  In the Employee Deduction Maintenance window, select the Employee ID and the Deduction Code.  We have four boxes available to enter box and label information.  Click the W-2 Box field’s right scrolling arrow.  Does the value change to 0 or a different value for the W-2 Box and blank or a different value for the W-2 Label?  If not, you probably have the same W-2 Box and W-2 Label entered more than once for this specific Employee ID and Deduction Code.  

Note: If this Deduction has the same W-2 Box and W-2 Label entered more than once for all employees and it shouldn’t be, you can change it at the Deduction Setup (on the Setup menu, select Deduction) level and roll down your changes.  Before making a change at the Deduction Setup level and rolling down the changes in the live company, make sure you make a complete restorable backup in case there is any unwanted data changes and/or losses.  You could set up a test company to verify your testing as well.  Here is a KB on how to do this:

885542  How to create a test or historical company in Payroll or in Canadian Payroll in Microsoft Dynamics GP
http://support.microsoft.com/kb/885542/en-US

You could also look at the UPR00500 table (Payroll Deduction Master).  This table is what the Employee Deduction Maintenance window pulls from.  For example, in SQL Server Management Studio, you could run the following select statement against the company database:

select W2BXNMBR, W2BXLABL,
       W2BXNMBR2, W2BXLABL2,
       W2BXNMBR3, W2BXLABL3,
       W2BXNMBR4, W2BXLABL4, x.*
from UPR00500 x
inner join (select EMPLOYID, DEDUCTON from      
              (select EMPLOYID, DEDUCTON, cast(W2BXNMBR as char(50))+W2BXLABL as CombinedStr from UPR00500 a where W2BXNMBR <> 0
              union all
              select EMPLOYID, DEDUCTON, cast(W2BXNMBR2 as char(50))+W2BXLABL2 as CombinedStr from UPR00500 b where W2BXNMBR2 <> 0
              union all
              select EMPLOYID, DEDUCTON, cast(W2BXNMBR3 as char(50))+W2BXLABL3 as CombinedStr from UPR00500 c where W2BXNMBR3 <> 0
              union all
              select EMPLOYID, DEDUCTON, cast(W2BXNMBR4 as char(50))+W2BXLABL4 as CombinedStr from UPR00500 d where W2BXNMBR4 <> 0) e
              group by EMPLOYID, DEDUCTON, CombinedStr
              having count(*) > 1) y
              on x.EMPLOYID = y.EMPLOYID and x.DEDUCTON = y.DEDUCTON

If you find values returned that are not supposed to have duplicates, here is a specific update statement for the scenario where first W-2 Box and W-2 Label and second W-2 Box and W-2 Label are the duplicated and the second W-2 Box and W-2 Label are supposed to be blank.  

update UPR00500
set W2BXNMBR2 = '', W2BXLABL2 = ''
where ((W2BXNMBR=W2BXNMBR2) and (W2BXLABL=W2BXLABL2))
and W2BXNMBR > ''
and W2BXLABL > ''
and DEX_ROW_ID = XXX

Replace XXX with the DEX_ROW_ID of the record that needs to be updated.

C. Pay Code

Open the HR and Payroll Navigation Pane. On the Cards menu, select Pay Code .  In the Employee Pay Code Maintenance window, select the Employee ID and the Pay Code.  We have four boxes available to enter box and label information.  Click the W-2 Box field’s right scrolling arrow.  Does the value change to 0 or a different value for the W-2 Box and blank or a different value for the W-2 Label?  If not, you probably have the same W-2 Box and W-2 Label entered more than once for this specific Employee ID and Pay Code.  

Note: If this Pay Code has the same W-2 Box and W-2 Label entered more than once for all employees and it shouldn’t be, you can change it at the Pay Code Setup (on the Setup menu, select Pay Code) level and roll down your changes.  Before making a change at the Pay Code Setup level and rolling down the changes in the live company, make sure you make a complete restorable backup in case there is any unwanted data changes and/or losses.  You could set up a test company to verify your testing as well.  Here is a KB on how to do this:

885542  How to create a test or historical company in Payroll or in Canadian Payroll in Microsoft Dynamics GP
http://support.microsoft.com/kb/885542/en-US

You could also look at the UPR00400 table (Payroll Pay Code Master).  This table is what the Employee Pay Code Maintenance window pulls from.  For example, in SQL Server Management Studio, you could run the following select statement against the company database:

select W2BXNMBR, W2BXLABL,
    W2BXNMBR2, W2BXLABL2,
    W2BXNMBR3, W2BXLABL3,
    W2BXNMBR4, W2BXLABL4, x.*
from UPR00400 x
inner join (select EMPLOYID, PAYRCORD from     
    (select EMPLOYID, PAYRCORD, cast(W2BXNMBR as char(50))+W2BXLABL as CombinedStr from UPR00400 a where W2BXNMBR <> 0
    union all
    select EMPLOYID, PAYRCORD, cast(W2BXNMBR2 as char(50))+W2BXLABL2 as CombinedStr from UPR00400 b where W2BXNMBR2 <> 0
    union all
    select EMPLOYID, PAYRCORD, cast(W2BXNMBR3 as char(50))+W2BXLABL3 as CombinedStr from UPR00400 c where W2BXNMBR3 <> 0
    union all
    select EMPLOYID, PAYRCORD, cast(W2BXNMBR4 as char(50))+W2BXLABL4 as CombinedStr from UPR00400 d where W2BXNMBR4 <> 0) e
    group by EMPLOYID, PAYRCORD, CombinedStr
    having count(*) > 1) y
    on x.EMPLOYID = y.EMPLOYID and x.PAYRCORD = y.PAYRCORD

If you find values returned that are not supposed to have duplicates, here is a specific update statement for the scenario where first W-2 Box and W-2 Label and second W-2 Box and W-2 Label are the duplicated and the second W-2 Box and W-2 Label are supposed to be blank. 

update UPR00400
set W2BXNMBR2 = '', W2BXLABL2 = ''
where ((W2BXNMBR=W2BXNMBR2) and (W2BXLABL=W2BXLABL2))
and W2BXNMBR > ''
and W2BXLABL > ''
and DEX_ROW_ID = XXX

Replace XXX with the DEX_ROW_ID of the record that needs to be updated.

Once the field(s) are updated correctly in the table(s), for the W-2s to be updated automatically, you can recreate your year end wage file.  However, if you have made numerous edits to your W-2s, if the year end wage file is removed, these edits will be removed as well.  To maintain your W-2 edits, you would want to edit the W-2s again to adjust the doubled amounts so they are correct.

I hope this helps you with fixing any Benefit, Deduction and/or Pay Code amounts that are incorrectly doubled on the W-2!