If you use the traditional approach (no lazy constraint) and solve the master to optimality each time (no time or iteration limits), then the objective value of the master solutions should be monotonically non-improving. Any improvement in the final master solution relative to the previous final master solution would indicate a problem with your code (or, possibly, a numerically unstable model).
If you terminate the master solutions early (time or iteration limit), then you are apply cuts based on possibly suboptimal solutions, so the master objective can improve (by moving from a suboptimal to an optimal solution) or get worse (cutting off what was a superoptimal solution).
If you use a lazy constraint callback, the second case applies: some of the solutions triggering the callback may be suboptimal, others may be superoptimal, so the objective can change in either direction.
Using the traditional approach, you can add the new cuts to the master problem as lazy constraints, but that is not the same as using a lazy constraint callback. Lazy constraint callbacks are incompatible with the traditional approach.
#CPLEXOptimizers#DecisionOptimization