The issue is that the let-cell is executed also for any change of some_input, which is not what you want here. The solution is to wrap it into a ref:
# ╔═╡ 248637d9-fbb1-4b9b-9ba1-23539206b3d0
using PlutoUI
# ╔═╡ c2fc96ab-6b86-4cf5-8d34-47443e3c206a
my_list = String[]
# ╔═╡ a7b70b21-ff49-4521-ba97-d5b67dbf1e26
@bind some_input TextField()
# ╔═╡ 6104110e-4b5a-49c9-a4d9-2f9653de01f5
typeof(some_input)
# ╔═╡ c475d4ba-f832-4f97-b116-f8d95cbed4c9
some_input_ref = Ref{String}()
# ╔═╡ 6dc037ab-90f8-4579-bc94-93f3ffb88f5f
some_input_ref[] = some_input
# ╔═╡ 89549754-af0d-4d33-82db-257d815dd006
@bind submit_button Button()
# ╔═╡ 43d1b02f-36dd-4ad8-9fa1-1356ca6edbc0
let submit_button
length(some_input_ref[]) > 0 && push!(my_list, some_input_ref[])
end
# ╔═╡ 529211bb-eceb-41f3-abe6-d6f7fe31cca0
my_list