You basically wants to rotate the particles around the forward vector of the modelview matrix:

[code=pascal]
function Matrix_GetForward(const Matrix: TMatrix4f): TVector3f;
begin
Result.X:= Matrix[02];
Result.Y:= Matrix[06];
Result.Z:= Matrix[10];
end;

...

Vector:= Matrix_GetForward(BillBoardMatrix);

MatRotate:= Matrix_Rotation(Particle.Spin, Vector);

[/code]
I haven't tested this code in practice, but i think it should do the trick.