As exuin commented, the problem is likely caused by player collecting 2 items in succession - the first one shows the counter and counts to 3. You collect the second item, and it tries to show the counter (which is already visible) and counts to 3. But before the second timer has reached zero, the first timer finishes and hides the counter.
Solution: Instead of the item handling ui show/hide, have a script in the counter itself, which is responsible of showing/hiding itself. Something like this:
var timer = Timer.new()
func _ready() -> void:
add_child(timer)
timer.wait_time = 3
timer.connect("timeout", $UI, "hide") # Connect signal to UI node's hide function
func _on_GeluLumenLapis_body_entered(_body: Node) -> void:
$UI.show()
timer.start()
Now have the item simply call item_collected()
from the item - or even better, simply connect body_entered
to that function. Which you can do from some parent object so that the items don't need to actually know where the ui node is located - this kind of decisions will save a ton of headache later on if you happen to rename some of the ui nodes.
EDIT: updated the code according to comments below