The PostgreSQL servers I work with at client sites are "frequently" restarted -- Every 4-6 weeks or so. We're given several days' advance notice of the planned reboot during the regular after-hours outage window.
Stopping your server before the clients can often cause "undefined behavior" on the client side, especially if the client is configured to attempt to reconnect.
Attempting to start a server before the previous sessions exit could easily cause an error like you reported (in fact, this is the expected behavior, since the alternate is partial or complete corruption of the database instances).
Failure of the PostgreSQL monitor to access the ST_geometry.so on the server is an exceedingly bizarre situation. I've never seen or heard of that occurring. The only possible explanation which would make sense is if the server's files are accessed through an exceedingly slow NFS mount.
In short, steps 1-4 & 7 are expected functionality, step 5 should not ever happen, and step 6 should not ever be necessary.