I believe this can be fixed by parenting the BillboardGui to the StarterGui, and setting the ‘Adornee’ property to workspace.Part. (this is probably the easiest solution)
For example
local Billboard = game.Players.LocalPlayer:WaitForChild(“PlayerGui”):WaitForChild(“BillboardGui”)
If I recall correctly, BillboardGuis and SurfaceGuis only work when parented to the StarterGui.
(any functioning gui elements inside of them, at least)
(see this)
The top button doesn’t even seem to register when the mouse enters the gui, you can see that because it doesn’t make the button’s background go darker.
The bottom button is parented to the StarterGui and is adorned to the part. The button registers when the mouse enters and when I click.
I’m pretty sure it said this on the wiki although I can’t check because the pages won’t load for me.
(edit)
Furthermore, the MouseEnter event doesn’t fire on the button that isn’t in StarterGui. It seems any GUI objects that aren’t in the StarterGui are simply cosmetic.