Well a followup to let others know the final outcome.
First, many thanks to all who helped me. I truly appreciate spending your time on my problems!
As it turns out, all I could get from my ISP was
1. A (pseudo) static IPv4 which I get by PPPoE (same address guaranteed but always assigned through PPPoE negotiation.
2. A dynamic /128 assigned by DHCPv6 over the PPPoE connection
3. A (pseudo) static /56 assigned by DHCPv6-PD over the PPPoE connection
Note that the IPv6 communication between the router and the ISP uses a link local address, NOT the /128. In fact, the /128 is not needed at all (as you will see)!
Here is how I configured:
1. Per the requirements of my ISP, I configured the WAN IPv4 as PPPoE and the WAN IPv6 as DHCP over the IP4 link with a /56 prefix. From this I found out my /56.
2. I then chose a prefix ID of ff for WAN addresses, 00 for LAN and 01 for VoIP (another inside LAN).
3. I created a WAN virtual IP/IP alias from the WAN /64 I chose and the mac address of the WAN adapter.
4. I made the LAN and VoIP interface IPv6 assignment to be Track Interface tracking the WAN /56 using prefix IDs 00 and 01 respectively
5. I enabled DHCPv6 and RA on LAN and VoIP
6. "normal" firewall rules (especially adding ICMPv6 req on WAN)
Kinda simple.
The amazing thing is that the IPv6 "WAN address" as known by pfSense (e.g. for binding OpenVPN etc) IS THE ALIAS!!! This, it turns out, is ideal for me. The ONLY dynamic address (the DHCPv6 assigned global WAN address) is totally irrelevant as I now have a static IPv6 global address!! In fact the dynamic WAN address doesn't even show up in the GUI Status|Interfaces though it does show in command line ifconfig.
The only place I have hardcoded an address (which I don't particularly like to do) is the alias. One place. Just one.
Finally, I added other things I use such as OpenVPN servers, OpenVPN clients etc. etc.
All told, I'm very happy with what you people helped me set up and I'm testing it extensively.