There is also HATCHGENERATEBOUNDADY for multiple selection.
I've played with the conversion to plwidth a bit, not bulletproof, but it should work too.
Not testing whether it's really rectange... unseparated boundaries...
(vl-load-com)
(defun c:Hatch2PolylineWidth ( / :midpt s i l e w)
(defun :midpt (p1 p2) (mapcar '/ (mapcar '+ p1 p2) '(2 2)))
(if (setq s (ssget '((0 . "HATCH") (93 . 4))))
(repeat (setq i (sslength s))
(setq e (ssname s (setq i (1- i))))
(setq l (cdr (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) (entget e)))))
(entmake (append '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline") (90 . 2) (70 . 0))
(list (assoc 8 (entget e)))
(if (> (distance (car l) (nth 1 l))
(distance (car l) (nth 3 l)))
(list (cons 10 (:midpt (nth 0 l) (nth 3 l)))
(cons 40 (setq w (distance (nth 0 l) (nth 3 l))))
(cons 41 w)
(cons 10 (:midpt (nth 1 l) (nth 2 l)))
(cons 40 w)
(cons 41 w))
(list (cons 10 (:midpt (nth 0 l) (nth 3 l)))
(cons 40 (setq w (distance (nth 0 l) (nth 3 l))))
(cons 41 w)
(cons 10 (:midpt (nth 1 l) (nth 2 l)))
(cons 40 w)
(cons 41 w)))))
(entdel e)))
(princ)
)