Well, I just played around with your capx too.
The problem is that you are converting the coordinates of the Coin being collected to the actual canvas coordinates, but then you are not converting the canvas coordinates to the HUD layer's coordinates. So, when the game screen does not fully fill the monitor it is off.
I created two local variables for that section: canvasX and canvasY
and set them too:
canvasX = LayerToCanvasX("Main",Coin.X,Coin.Y)
canvasY = LayerToCanvasY("Main",Coin.X,Coin.Y)
then created the Coins object at:
Create object Coins on layer "HUD" at ( CanvasToLayerX("HUD",CanvasX,CanvasY), CanvasToLayerY("HUD",CanvasX,CanvasY) )
That seemed to work fine. (I slowed the speed of the Coins way down because they were moving almost too fast to see!)
I still think simple is better. Your capx sure has a lot of global variables and a lot of code. I would try to simplify it by using more instance variables, arrays, functions, etc...
But, the game looks good! You are well on your way to making some great games! :)
I can't really tell why the FPS would decrease. It does seem to work fine in the version you uploaded. Like zenox98 said, try using the debugger to see what is hogging all the processing time - you probably have more objects than you think, or something isn't getting reset...