Here is a seemingly related problem with raise and lower frame.
;; This whole sexp works
(let ((f (selected-frame)))
(lower-frame f)
(sit-for 1)
(raise-frame f))
;; Only the first raise-frame call works
(let ((f (next-frame)))
;; f is raised
(raise-frame f)
(sit-for 1)
;; f is NEVER LOWERED
(lower-frame f))
Bob