There were a few problems with your code, and how it handle the different "phases" (fade in / rotate / fade out). They have to be seperated so that it doesn't increase or decrease the alpha while rotating etc.
here is how I'd do that:
Sync Rate 60
color backdrop 0
#Constant Round_FadeIn 0
#Constant Round_Rotate 1
#Constant Round_FadeOut 2
global round as integer = 0
global rotationCounter as integer = 0
global alpha# as float = 0.0
global alphaspeed# as float = 2.0
global speed# as float = 2.0
D3D_StartText
D3D_Make_3DText 3,1,"BLAH 2.0",.1,2,1
position object 3,0,0,8
D3D_EndText
set object transparency 3,3
do
Select round
//Fade In
Case Round_FadeIn
//Increase the alpha-value
inc alpha#,alphaspeed#
set alpha mapping on 3,alpha#
//If faded in: next round
if alpha#>100.0
alpha#=100.0
round = Round_Rotate
endif
text 10,10,"Round_FadeIn: " + str$(alpha#) + "% Alpha"
Endcase
//Rotate
Case Round_Rotate
//rotate based on speed#
yrotate object 3, wrapvalue(object angle y(3) + speed#)
//if rotated nearly 360° increase the counter
if object angle y(3) >= ((360.0/speed#) - 1.0) * speed#
Inc rotationCounter
endif
//after 3 rotations: next round
if rotationCounter = 3 Then round = Round_FadeOut
text 10,10,"Round_Rotate: " + str$(rotationCounter) + " Rotations"
Endcase
//Fade out
Case Round_FadeOut
//Increase the alpha-value
dec alpha#,alphaspeed#
set alpha mapping on 3,alpha#
//If faded in: next round
if alpha#<0.0
alpha#=0.0
exit
endif
text 10,10,"Round_FadeOut: " + str$(alpha#) + "% Alpha"
Endcase
Endselect
LOOP
Repeat
text 10,10,"End. (Any key to exit)"
Until scancode() <> 0
End
If there's something you don't understand, don't bother asking.
[And i really hope that formula to make the " = 359.5" speed-independent does work, did that by heart

]