Right.
I'd suggest it's more numerically correct to stick with either totally separate 'vectorized' style xVel / yVel (ie no angle) or have speed and angle and derive xVel/yVel from the speed and angle.
In the latter case, the component velocities xVel and yVel, at any time, will always be:
xVel = speed*cos(angle);
yVel = speed*sin(angle);
which you derive just as you need them. For example, you can say, at any time:
sprite->posX += sprite->speed*cos(sprite->angle);
sprite->posY += sprite->speed*sin(sprite->angle);
to reposition the sprite. As an optimisation, if angle doesn't vary much, I'd consider storing the result of cos(angle) and sin(angle), but not xVel/yVel, eg:
sprite->scaleVelX = cos(sprite->angle);
sprite->scaleVelY = sin(sprite->angle);
...
sprite->posX += sprite->speed*sprite->scaleVelX;
sprite->posY += sprite->speed*sprite->scaleVelY;
I'm obviously not taking edge rebound into consideration here, but you get the general idea.
Having just one speed/angle pair per sprite makes things a bit easier to understand. It also allows you to alter the speed and angle (to simulate acceleration etc) with relative ease. The correct coordinates will always be found by the expressions above for any given value of speed/angle.
Also, unless your sprites always all move with the same speed, you'd want to make the speed/angle properties part of the sprite structure.