The ROTATE OBJECT command doesn't rotate the object based on it's current rotation, it rotates it to the angle you specify based on it's starting rotation. So using rotate object 3,270 would rotate it 270 degrees from where it started when the game started, regardless of it's angle. That's why it went through the paddle. You can fix this by adding the object's current angle to the rotation;
yrotate object 3,object angle y(3)+270
However using this method, eventually the object's angle could go above 360, which can make things difficult later on when you need a rotation value between 0 and 360. This is where wrapvalue comes in, it'll find out what number between 0 and 360 a given number should be. So if you gave wrapvalue the value -90, it would return 270. If you gave it 720, it'd give you 360, etc. Changing the above code to;
yrotate object 3,wrapvalue(object angle y(3)+270)
The reason yours (kind of) works now is because you're rotationg object 3 to 90 degrees when it hits the left paddle. This means it'll go straight down.
The object collision command accepts 1 object as the second parameter, or 0. If you put 0, it checks for collision with every object in the program. Here's the code fixed;
move object 3,2
if object collision(3,0) > 0
yrotate object 3,wrapvalue(object angle y(3)+270)
play sound 1
endif
loop
(Untested but Im pretty sure that'll work). There's no need for the second collision check now.
Projects: Online CTF Game | Newcommer's Guide to FPS's