3DCursor is UI data (hence not expected to be affected by undo) that is stored in actual data (Scene)... So it needs some special care during undo. New undo code now re-reads data into existing memory, which means copying of 3DCursor data has to happen earlier in that case, when we still have both old and newly read data available.