The DataReturned event is set to fire continuously, whenever values from the PLC are returned, while the DataChanged event only fires when those returned values have changed, something like this:
Returned Values DataReturned DataChanged
0, 0, 0, 0, 0, 0 fires fires
0, 0, 0, 0, 0, 0 fires
0, 0, 0, 0, 0, 0 fires
0, 0, 0, 0, 0, 0 fires
0, 0, 1, 0, 1, 0 fires fires
0, 0, 1, 0, 1, 0 fires
0, 0, 1, 0, 1, 0 fires
0, 0, 1, 0, 1, 0 fires
0, 0, 1, 0, 1, 0 fires
With the DataChanged event, the GUI gets updated only when the values have changed which gives the GUI time to do other things.