While I don't have a fix for the root issue, I did have a chance to create a lint for LOGBOOK duplicates, as you suggested.
It can be found here:
Also below:
(defun jeff/org-logbook-retrieve-timestamps (beg end)
"Retrieve timestamp of all state-change entries between BEG and END."
(save-excursion
(let* ((reversed org-log-states-order-reversed)
(search (if reversed 're-search-forward 're-search-backward))
(limit (if reversed end (point)))
(re (format
"^[ \t]*-[ \t]+\\(?:State \"%s\"\s+from\s+\"%s\".*%s%s\\)"
org-todo-regexp
org-todo-regexp
org-ts-regexp-inactive
(let ((value (cdr (assq 'done org-log-note-headings))))
(if (not value) ""
(concat "\\|"
(org-replace-escapes
(regexp-quote value)
`(("%d" . ,org-ts-regexp-inactive)
("%D" . ,org-ts-regexp)
("%s" . "\"\\S-+\"")
("%S" . "\"\\S-+\"")
("%t" . ,org-ts-regexp-inactive)
("%T" . ,org-ts-regexp)
("%u" . ".*?")
("%U" . ".*?"))))))))
log-entries)
(goto-char (if reversed beg end))
(while (funcall search re limit t)
(push (match-string-no-properties 3) log-entries))
log-entries)))
(defun org-lint-duplicate-logbook-timestamps (ast)
"Report LOGBOOK entries with duplicate timestamp"
(org-element-map ast 'drawer
(lambda (d)
(when (equal (org-element-property :drawer-name d) "LOGBOOK")
(let* ((beg (org-element-property :contents-begin d))
(end (org-element-property :contents-end d))
(orig (jeff/org-logbook-retrieve-timestamps beg end))
(uniq (cl-remove-duplicates
orig
:test (lambda (x y) (or (null y) (equal x y)))
:from-end t))
(diff (- (length orig) (length uniq))))
(unless (zerop diff)
(list (org-element-property :begin d)
(format "LOGBOOK has %d entries with duplicate timestamp" diff))))))))
(add-to-list 'org-lint--checkers
(make-org-lint-checker
:name 'duplicate-logbook-timestamps
:description "Report LOGBOOK entries with duplicate timestamp"
:categories '(properties)))