I can tell you about my setup, maybe it will help.
1. Regarding Currency, I believe that that value is only passed on Purchase event and shouldn't be sent on other events. That is my setup at least and FB has not complained on missing relevant data.
2. Not sure what is not happening here, your setup looks similar to mine and should be working. The one thought I would suggest is to verify that the variable estimate.workEmail actually contains the email at the time when the call is sent. In my case, the actual signup call is difficult to pinpoint in the assitant since the user is redirected on click. But the following page server call does contain it and that is good enough since this will be stored on user level towards the FB client id.
Here is my setup and the resulting page server call to FB after a signup has been made:
Hope it helps.