Well, a couple of hours and I have a solution that works for my needs. The only problem is it will not handle sprites that have been rotated on the atlas because I get the UV's explicitly.
public static Texture2D SpriteToTexture(tk2dSprite sourceSprite) {
Texture2D sourceTexture = (Texture2D)sourceSprite.GetCurrentSpriteDef().material.mainTexture;
Vector2[] UVs = sourceSprite.GetCurrentSpriteDef().uvs;
// Get the raw uv-pixel co-ordinates of the image.
float fX = (sourceTexture.width) * UVs[0].x;
float fY = (sourceTexture.height) * UVs[2].y;
float fX2 = (sourceTexture.width) * UVs[1].x;;
float fY2 = (sourceTexture.height) * UVs[0].y;
// Calculate the width and height of the sprite.
float fWidth = fX2 - fX;
float fHeight = -(fY2 - fY);
// Round the values to pixel units.
int x = Mathf.RoundToInt(fX);
int y = Mathf.RoundToInt(fY - fHeight);
int width = Mathf.RoundToInt(fWidth);
int height = Mathf.RoundToInt(fHeight);
// Get the pixels contained within the pixel units of the atlas.
Color[] pixelRect = sourceTexture.GetPixels(x, y, width, height);
// Generate a new texture and populate it with the pixel data.
Texture2D newTexture = new Texture2D(width, height);
newTexture.SetPixels(pixelRect);
newTexture.Apply();
return newTexture;
}
I'll leave this here for anyone else that may be interested.