> It is not easy to understand the convoluted example, but did you try
> to see whether switch-to-buffer-preserve-window-point has any effect
> on the behavior you consider strange?

After some more debugging, I found setting read-minibuffer-restore-windows to nil gave the desired behaviour.

From the doc for read-minibuffer-restore-windows : "Non-nil means restore window configurations on exit from minibuffer."  I guess this includes window points as well - so this is expected behaviour in that changes to the window configuration as a result of a timer run whilst the minibuffer is active are reverted?