SHARE-LOCK is the default lock if you don't explicitly specify neither NO-LOCK nor EXCLUSIVE-LOCK. To me it is a leftover from stone age IT where the thought of users accessing your database concurrently was beyond real life.
Not specifying the lock or using SHARE-LOCK is worst practice. It is the road to hell. There is hardly a use case which justifies the usage of it. In all of my Progress developer's life I was only able to come with one valid use case in which I deliberately use a SHARE-LOCK to synchronize threads. Therefore, never use SHARE-LOCK unless you are absolutely sure about what you are doing and have a valid use case. Plus, not specifying the lock hardly makes your code transparent.
Regarding your question: At the end of the transaction scope, if the buffer scope is larger than the transaction scope, the EXCLUSIVE-LOCK will be downgraded to a SHARE-LOCK. If they are equal the EXCLUSIVE-LOCK will be released at the end of the transaction scope. You code probably has another issue: The transactions scope is extended beyond the DO block which encloses the FIND - simply because DO blocks do not have scoping capabilities unless you explicitly specify them. In such a case the transaction and buffer scopes are extended to the next outer block with scoping capabilities - which might be the whole procedure. You should make yourself familiar with the concepts of buffer and transaction scope - it is essential knowledge for making good code that updates the database.
Heavy Regards, RealHeavyDude.