Additionally, I have configured IPSEC ikev2 based on https://nordvpn.com/tutorials/mikrotik/ikev2/. The only change is that in step 7, instead of covering my whole home IP range, I have added an address list which only includes my Nvidia Shield TV static ip and changed the ipsec mode-config to only be for the Nvidia Shield TV static ip list (which only contains 1 IP address).
Once this is turned on, the Nvdia Shield TV connects VERY slowly if at all.
I have verified that the server I have selected and am connecting to works using the native apps on my phone / laptop
I have verified that if I use the setting exactly as is in the NordVPN instructions to cover the whole network, it also works to funnel all my home network traffic through the VPN
I have verified that if I turn off the NAT rules on the reddit pihole sub that the configuration for the Nvidia Shield TV still does not work
I have Blokada installed on my Nvidia Shield TV but did not think to check if this was the issue (so this may be a problem). It was for adblocking only and no custom DNS settings etc
I have not tried changing the DNS server / pi hole settings on my network
The apps I tried are Youtube (extremely slow / barely usable) and Netflix (not usable)
You are still using source address for all traffic and in NAT the NordVPN Nat is always on top.
So you have to add in your proposed rule UDP!/!53 and duplicate that line and change to TCP/!53
!53 stands for everything except 53.
So DNS traffic should then go to your Pi-hole as that was the situation before.
Lets take a step back. You had it working but it was slow.
My suggrstion is to not put DNS traffic into the VPN and use the Pihole instead. To get traffic to the pihole you put the IP of pihole into, the DNS given to clients, in your DHCP.
So your rule is the mangle rule and from one rule you hsve tos split to two tules because DNS uses UDP and TCP. Then you make the first one to do TCP and not catch port 53 (DNS).
The second line does UDP and not catch port 53.
/ip ipsec mode-config
set [ find name=NordVPN ] connection-mark=NordVPN
You have now marking traffic coming from ShieldTV, on the src-addres-list, to go through the VPN except for the TCP/UDP traffic on port 53.
If you still not getting up to speed then contact NordVPN to get some advise on this. They could advise to use dedicated IP addresses of them and to use the DNS service of them. Then you remove the protocol and port part from the lines I gave.
Also the TCP MTU could be off. In Mangle add this line and move it up as high as possible. You need still to mark the traffic and the DNS could be working with your or against you. So try both ways.