This is a case for you friendly neighbourhood cross product.
From the top of my head, something similar to this should do it:
* Start out with your orientation before applying the tilting. We call the forward, right and up vectors:
forwardBefore, rightBefore, and upBefore. These vectors need not be units vectors, only the direction matter.
* Get the normal of the terrain where you are currently located. (Not that this will not work if the normal is identical to forwardBefore or rightBefore). I call that vector upAfter since this will be your new up vector.
* Find your new forward vector by crossing upAfter and rightBefore. I call the result forwardAfter:
forwardAfter = Vector3.Cross(upAfter, rightBefore); // Note the order!
[* It is not needed for this exercise, but if you want your new right vector, cross forwardAfter and upAfter. I call the result rightAfter:
rightAfter = Vector3.Cross(forwardAfter, upAfter); // Note the order! ]
* You can now create the world matrix using Matric.CreateWorld(...) using your position, forwardAfter and upAfter. I don't believe you will need to normalize the vectors before, but you'll have to verify this. Alternatively, you can create the world matrix yourself using forwardAfter, upAfter, rightAfter, and position.
If you are unfamiliar with cross products (and the right-hand rule) invest some time in understanding it, e.g.
http://en.wikipedia.org/wiki/Cross_product, you will not regret it!
Hope this helps!
---
Sharing my TDD XNA experience on
XNA's Nicely Addictive