CuraLE uses the nozzle offset(s) set in the machine profile to generate GCode that has the coordinates adjusted for the current nozzle. Programs like the GCode Analyzer don’t understand dual extruders and therefore the picture they draw should be offset. You can change CuraLE to not offset the GCode (and let the firmware handle it), but then its views are offset (so I don’t do this).
Marlin has the capability of handling the offset(s) in firmware via the M218 command. The values are not stored in the EEPROM so they must be set each time the printer is turned on.
Simplify3D normally expects the offset(s) to be handled by the firmware so the GCode produced has coordinates for both nozzles as if they were at exactly the same location. You can change this behavior but then the views within S3D are offset (so I don’t do this).
Since I use both slicers, I put the proper M218 command(s) in the start code for each slicer. That way I don’t have to mess with it and can print jobs from either slicer in any order. Note that if you copy the start code from CuraLE to Simplify3D, the M218 command(s) need to be at the end of the start code (I set to zero at the start and to the actual offset at the end).
I use OctoPrint and its GCode viewer needs to know if the offset is in the GCode or in the firmware to show a correct representation of what the printer is doing.
Now to your issue with things showing fine in CuraLE but actually being printed offset. It sounds like the firmware may also be offsetting the coordinates in the GCode. I’d suggest something simple like a 5x5mm square and a 5x5mm square a layer height or two off the bed. Merge them in CuraLE, generate the GCode, and print. If they look good in CuraLE but print offset, post the .stl files and the GCode (in a .zip). Go to the printer console and enter the command “M218” which should print out what Marlin believes the offsets to be (and they should be 0,0 and 0,0).