Shrewsbury Town lost for the ninth time in 13 League One games in controversial style at Bristol Rovers.