It is fine if you configure another BGP group between RR with normal IBGP peer it will be useful if you have local or aggregate subnets for example and want to advertise from one RR to the other one. Generally it will not make any problems just normal IBGP session between them.
you have two RR just for redundancy as incase of one fail the other one still have the ability to reflect all update to clients.
don't worry about loop the BGP is loop free the idea is based on cluster-id. R2 will add his cluster id in the update and reflect it to R3, R4. R3 will advertise the route to R1 as you mentioned but R1 will find the same cluster id in the update so it will know it is reflected from another RR already and drop that update.