Ah, yeah I see.
Well when you do ping6 with -I it does that, but not with -S.
If you use -S (ip) then it will send it the right way, but the error is usually a bit different.
: ping6 -I em0 www.google.com
PING6(56=40+8+8 bytes) 2001:xxxx:xxxx:xxxx::1 --> 2607:f8b0:4003:c01::69
ping6: sendmsg: No route to host
ping6: wrote www.google.com 16 chars, ret=-1
ping6: sendmsg: No route to host
ping6: wrote www.google.com 16 chars, ret=-1
: ping6 -S 2001:xxxx:xxxx:xxxx::1 www.google.com
PING6(56=40+8+8 bytes) 2001:xxxx:xxxx:xxxx::1 --> 2607:f8b0:4003:c01::69
16 bytes from 2607:f8b0:4003:c01::69, icmp_seq=0 hlim=57 time=69.442 ms
16 bytes from 2607:f8b0:4003:c01::69, icmp_seq=1 hlim=57 time=66.597 ms