Sorry about the late reply!!
Hmm, trying to get my head around that. Not sure I agree, but I may be off so I’ll talk through it. So with your configs as they are, R1 will receive information about the 10.0.0.0/22 subnets (all the loopbacks on R3) directly from R3 via RIP. R1 will potentially receive info about these loopbacks via OSPF from R4. BUT, R2 has been configured to add a tag of 120 to any routes learned via RIP that have been redistributed into OSPF. So these routes when they reach R1 via OSPF, will be tagged. But R1 is configured to deny any routes with a tag of 120. So it won’t redistribute them back to RIP, but it will place it in its own routing table… hmm I see. And since OSPF has a smaller AD than RIP, it will choose that instead… Yes, that means that by setting the OSPF external routes to have an AD of greater than 120, the router will prefer the RIP learned routes and send it correctly. I see now, and I was originally incorrect.
So this is a good exercise because it actually clarifies what tags are for. They ARE for the prevention of re-redistributing (yes two re’s) networks into a routing protocol AS that they originally came from thus avoiding routing loops. Tags DO NOT prevent the sub-optimal routing decisions similar to that described in your exercise. This must be dealt with by adjusting the AD of external OSPF routes as you very rightly mentioned.
I hope this was as helpful for you as it was for me!