If I understand you well, you would like to retain all point objects in a drawing, and separate overlapping elevation text in a layer that can be hidden if needed. Although I don't like sharing my work on this forum because at more then often some else collects all the fame (i.e likes and final solution). Haven't been posting posting on this forum almost a year.
This lisp works only with text objects that have defined text style and assumes that all text objext are in layer 0.
a) Put all text in a layer 0. After you envoke "overlap" function for a first time it seeks for layers "to_hold" and "to_hide". If they dont exist in a drawing, it creates them.
b) By repetitive calls to command "overlap" (just keep enter key pressed) it looks for overlapping text and separates them in those to layers. You will see how text object change its color to red and green.
If you want to retain you layer structure in separate file perform the action for each layer and rename resulting layers respectively. Copy all text object from that layer in a new empty drawing and perform action for each layer.
If original layers name is i.e drainage you may rename resulting layers to drainage_hold and drainage_hide or what ever you like.
I have written this tool in a hury many years ago, never had a time to polish it to perfection. It is not perfect but it served me well in many occasions. I am posting a lisp file and your file with separated overlaping text. If after first sesion you find overlaping text, transfer all text in layer "to_hold" to layer 0 and repeat the action, or do it by hand.
(defun new_layer (name color) ;
(if (= (tblsearch "layer" name) nil)
(command "._layer" "_n" name "_c" color name "")
(command "._layer" "_t" name "_on" name "_c" color name ""))
)
(defun c:overlap ( / );*error* ss len del tlist tb ang p1 en en_len en_pts _l j k m clip_ss cen
(defun *error* () (princ))
(setvar "cmdecho" 0)
(new_layer "to_hold" 3)
(new_layer "to_hide" 1)
(setq ss (ssget "X" '((0 . "text") (8 . "0")))
del 1.0 _del (* -1.0 del) i 0)
(repeat (sslength ss)
(setq e (ssname ss i)
en (entget e)
tb (textbox en)
ang_rad (cdr(assoc 50 en))
p1 (cdr(assoc 10 en ))
dx (car p1) dy (cadr p1)
x_list (list _del (+ (caadr tb) del) (+ (caadr tb) del) _del _del)
y_list (list _del _del (+ (cadadr tb) del) (+ (cadadr tb) del) _del)
_cos (cos ang_rad)
_sin (sin ang_rad)
cos_list (list _cos _cos _cos _cos _cos)
sin_list (list _sin _sin _sin _sin _sin)
-cos_list (mapcar '* (list -1 -1 -1 -1 -1) (list _cos _cos _cos _cos _cos))
-sin_list (mapcar '* (list -1 -1 -1 -1 -1) (list _sin _sin _sin _sin _sin))
dx_list (list dx dx dx dx dx)
dy_list (list dy dy dy dy dy)
x_cos (mapcar '* x_list cos_list)
y_cos (mapcar '* y_list cos_list)
-x_cos (mapcar '* x_list -cos_list)
-y_cos (mapcar '* y_list -cos_list)
x_sin (mapcar '* x_list sin_list)
y_sin (mapcar '* y_list sin_list)
-x_sin (mapcar '* x_list -sin_list)
-y_sin (mapcar '* y_list -sin_list)
_x (mapcar '+ x_cos -y_sin)
_y (mapcar '+ y_cos x_sin)
_x (mapcar '+ _x dx_list)
_y (mapcar '+ _y dy_list)
en_pts (mapcar 'list _x _y)
j 0
clip_ss (ssget "_CP" en_pts '((0 . "TEXT")))
k (sslength clip_ss)
m 1
zad (entget (ssname clip_ss 0))
zad (subst (cons 8 "to_hold") (assoc 8 zad) zad)
zad (entmod zad)
)
(repeat k
(setq cen (entget (ssname clip_ss m))
cen (subst (cons 8 "to_hide") (assoc 8 cen) cen)
cen (entmod cen)
m(+ m 1)
)
)
(setq i (+ i 1))
)
(setvar "cmdecho" 1)
)
In attachment is your file after cleanup.
I hope ithis works for you. If it works you should proclame it "final solution".
Miljenko Hatlak

Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.