Ok, here is my attempt to code this:
https://github.com/Bad-ptr/emacs/commit/cf6b0d9f08dbdc5dd685dbc6a5ef9ff18575e2b2
This seem to work for my example from the start of discussion(not tested it much for now).

> you didn't describe the use case where this issue got in your
way, so perhaps you should. 

If you set a 'heay' buffer-predicate like here
https://github.com/Bad-ptr/persp-mode.el/blob/master/persp-mode.el#L2793
(This package provide a way to switch between 'projects',
each project has a list of buffers, it is essential to set a buffer-predicate that
will constrain buffer switching to the current 'project' so it needs to check if a
buffer is a member of the current project list. There may be many buffers from
many projects)
And if you are the user of a package that overuse the with-temp-buffer(like helm
or if you run down the list of candidates of the company-mode) you can notice a
slowdown.
https://github.com/Bad-ptr/persp-mode.el/issues/35

And I just think that this behavior of the kill-buffer is wrong and could be fixed
quite easily and without introducing new functions or breaking user experience.
Maybe I'm wrong.
And I'm not saying that this is a critical bug or somehow urgent, just wanted to
discuss the idea.