You need to multiply your rotation matrix by a translation matrix to get a matrix that will rotate your object around a non-origin position.
That's a bit of a mouthful so looking at it this way might help:
First apply a translation matrix to your cube that moves the center of the cube (or rotation origin) to the world origin (0,0). Now apply your rotation matrix. Now apply the opposite translation to put the cube back to it's original position. Of course now it will be rotated AND in it's original "position", which is what you want.
Effectively what's been done is applying a matrix (Trans x Rotation x ^Trans) to the cube.
Your rotation matrix is 2D. If you want to rotate around arbitrary 3D axes you need to use a 3D rotation matrix. If you install the XNA framework for C# you will get a matrix math library for free. XNA is supposed to be for games but depending on what you are doing you might find it useful to use for the matrix math rather than rolling your own.