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