You can do this completely with a post process shader.
There is a great example of how this shader works at the XNA creators club
http://creators.xna.com/en-US/sample/nonrealisticrenderingThe basic idea is:
1) increase the contrast of your rendered image
2) read from a 'sketch' texture using a variable randomized offset (which gives it that shaky hand drawn look)
3) in negative color space (1 - color) combine the sketch texture value with the scene color value
4) dot product of the negative color space combination with a brightness constant
Sketch Texture:
output (before color multiply)
rough idea, not final code i didn't test this, its based on the above sample
float4 PixelShader (float2 texCoord : TEXCOORD0) : COLOR0
{
float3 scene = tex2D(SceneSampler, texCoord);
float3 saturatedScene = saturate((scene - SketchThreshold) * 2);
float3 sketchPattern = tex2D(SketchSampler, texCoord + SketchJitter);
float3 negativeSketch = (1 - saturatedScene) * (1 - sketchPattern);
return dot(1 - negativeSketch, SketchBrightness);
}