Since the above solution is O(2*N) anyway, there's no need for creating an intermediate collection.

    def sendTerminated(ifLocal: Boolean)(watcher: ActorRef): Unit = 
      watcher match {
        case a: ActorRefScope if a.isLocal == ifLocal =>
          try watcher.tell(terminated, self) catch {
            case NonFatal(t) ⇒ publish(Error(t, self.path.toString, clazz(actor), "deathwatch"))
          }
        case _ => // N/A
      }

    watchedBy foreach sendTerminated(ifLocal = false)
    watchedBy foreach sendTerminated(ifLocal = true)