Cash-neutral is simple rebalancing: Sell proceeds fund the buys. Market value stays flat. The problem is that the bonds being sold and bought almost never have the same duration. A cash-neutral switch from a 3-year bank bond into a 10-year utility increases duration as a side effect. The PM wanted a sector rotation. They got a sector rotation and a long duration bet.
Duration-neutral is cleaner from a risk perspective. The trade list is sized so the portfolio's overall duration doesn't move. But the cash amounts on each leg rarely match. There's a residual that needs to go somewhere. Money market instrument, futures overlay, or just accepting the cash drag. In a mandate with tight liquidity constraints this becomes its own operational problem.
A few consecutive cash-neutral switches can drift duration by 0.3 years or more. If the mandate has a ±0.5 year band around the benchmark, that drift pushes the portfolio toward the edge without anyone intending it. The duration creep is a by-product of individually reasonable sector calls.
There is a third way of doing it: factor-neutral rebalancing. Hold duration constant, but also spread duration, convexity, or a set of factor exposures. Analytically this is more ambitious. Practically harder, because the rebalancing engine has to solve a multi-constraint optimisation. Most platforms support cash-neutral and duration-neutral. Fewer systems support arbitrary factor constraints, and the computation time on those can be lengthy.
Short-duration credit with a tight band should rebalance duration-neutral. Total return with wide limits might prefer cash-neutral for speed. Liability-matching portfolios should arguably be liability-neutral, which is a different constraint that most rebalancing tools do not support natively.