When I took a look at the documentation for PromptGamePassPurchaseFinished, I found this pretty important line in that parameter: “This may not accurately reflect if the purchase itself has successfully processed”. This event isn’t used to check whether a purchase has been completely processed, all it really tells you is what the user did when they were prompted with the gamepass
EDIT: sorry for not actually giving the solution, I forgot to add that using UserOwnsGamePassAsync() is the actual way to check whether the purchase was processed
Honestly, that’s the only part I can’t immediately answer. My best guess is that it could be down to Roblox Studio with the way it handles purchases in testing, as you technically never purchase the item. Try to see if you can get this method to return true in a live server.