Before rules are checked first (in other words, before the real action is carried out) and the rule sequence continues after you run one, by default, unless you stop it manually with something like 'rule fails / stop the action / instead do BLAH '.
So in answer to your question – you’re running the inventory check on the player with the before rule. The game then either says ‘can’t’, or it actually usurps the job of the GIVING action itself, putting the coin on Amy, and has Amy say ‘ta.’ And either way… the action of GIVE COIN TO AMY continues to run after your Before rule, and goes through all the built-in mechanisms in the GIVING action. So now it checks if the player has it, sees they don’t (if your before rule already handed it to Amy), tries to pick it up (because it’s visible on Amy?), and is blocked by default, because default behaviour is not to allow this kind of theft.
Basically, GIVE COIN TO AMY is an action that will mostly be handled by Inform’s built in mechanisms. You don’t have to manually move the coin to Amy - the giving action does that.
What is not default is Amy saying ‘Ta.’
The usual way to handle a special case like this is with an After rule. A Report rule is for giving the default response of the action, which in this case would be something like ‘You give the coin to Amy.’ But you want her to say ‘Ta’ instead, or as well.
So all you need for the entire thing to work is this:
After giving coin to Amy:
say "You hand the coin to Amy. She says, 'ta.'";
The before rule is not needed. Manually programming the coin to go to Amy is not needed. It’s not a great use case for an Instead rule either, though some people would do it that way.
Here’s a good post summarising the rulebook processing order and behaviour:
-Wade