IPsec policies which are used for bare IPsec match on IP subnets, not ranges, and on IP payload protocols such as TCP, UDP, GRE... and, where applicable, that protocol's ports.
RDP is an application protocol running atop TCP on port 3389 and under circumstances can use also UDP port 3389, both at server side.
So in your case, you could use an IPsec policy to permit access from the whole subnet 192.168.0.0/27 to the single address 192.168.1.50/32 for protocol TCP and port 3389 at the side of the single address. However, it would mean that
- any other packets from 192.168.0.0/27 to 192.168.1.0/24, including packets to 192.168.1.50 except those to TCP port 3389 there, would be routed up to the standard routing rules, so in extreme case they could leak out to the public network
- also hosts 192.168.0.1 to 192.168.0.9 and 192.168.0.21 to 192.168.0.31 could access RDP at 192.168.1.50
For the first point, it seems from the manual that you could use a second policy (order matters) which would match all packets between 192.168.0.0/27 and 192.168.1.50 so it would catch all those not caught by the first policy and would drop them, but the issue of letting other clients from 192.168.0.0/27 through would still exist.
Therefore, I would personally use an IPsec policy matching on the complete /24 subnets and on all protocols (which also implies that no limitations to particular ports could be set), and I would use normal firewall rules to enforce the restrictions, and I would apply them already at the client side to save some tiny bit of bandwidth.
The following rules would have to be placed in this exact order right before the "chain=forward, action=fasttrack-connection" rule in your IP firewall filter table (use place-before while creating them or move or GUI afterwards to place and order them properly):
/ip firewall filter
add chain=forward src-address=192.168.0.10-192.168.0.20 dst-address=192.168.1.50 protocol=tcp dst-port=3389 connection-state=new action=accept
add chain=forward src-address=192.168.0.10-192.168.0.20 dst-address=192.168.1.50 protocol=udp dst-port=3389 connection-state=new action=accept
add chain=forward src-address=192.168.0.0/24 dst-address=192.168.1.0/24 connection-state=established,related action=accept
add chain=forward src-address=192.168.0.0/24 dst-address=192.168.1.0/24 action=drop
As this way you're going to make use of connection-tracking, you
must not prevent the packets between 192.168.0.0/24 and 192.168.1.0/24 from being connection-tracked as the manual page of IPsec suggests to do if you want to save some CPU. But you do have to prevent them from being src-nated if src-nat would be normally used on the route where the packets are sent before the IPsec policy "steals" them from there.
At the other end of the tunnel, where you do not use these filter rules, you can exclude packets between 192.168.0.0/24 and 192.168.1.0/24 from connection tracking as the manual suggests.