When a model is decompiled and compiled again, the vertex that make up the UV map/maps for each texture,
get moved over towards the left hand side, and because of this, the more times the model gets decompiled
and compiled the more the texture will become out of line.
What i do to correct this problem, although there maybe easier ways of doing this, is use milkshape to convert the
reference smd files that make up the model into ms3d.files. Then i load each file into Lithunwrap, edit the UV maps
and save them. When i've finished doing this with all the ms3d files, i then load them back into milkshape, and then
export each one as a halflife smd file over the original smd files i started with, and compile the model again..
I decompile a weapon model, and open it's qc file and look for the line that refers to the meshes, shown here.

//reference mesh(es)
$body "gun" "reference"
$bodygroup "sleeve"
studio "brit_sleeve"
studio "axis_sleeve"
I then make a note of the smd files that make up the meshes for the model, which in my example would be.
So now i know which smd files i need to edit, so one at a time i import them into milkshape and save them as
ms3d files, so i end up with three files called.
Then one at a time i load them into lithunwrap, and realign the textures and save them, straight over the old one's.
so now i have the same ms3d files but edited so the textures are aligned correctly.
Then again one at a time i load each file back into milkshape and export them as halflife smd files over the original smd
files, so i end up with.
Then i just compile the model agiain.
Here is a brief guide to using lithunwrap when realigning textures.
Use the materials menu on the right hand side in lithunwrap to select the individual uv maps for editing that make
up the model, as shown in image 1, it also shows how the vertex have been moved over to the left, through
compiling and decompiling.
Make sure you enable select by vertex, which you will find in the menus under select. Now select all the vertex that
need moving back towards the right, you can do this by dragging a box around them, or holding down shift will
select individual vertex. like image 2 shows.
Then go to the menus and choose edit/move/arbitrary, this will bring up a box that you can use to move the
selected vertex. Just use the right arrow button to move the vertex back to there original position, like image
3 shows, also edit the amount field box for making those fine adjustments if need be.
The other good thing about lithunwrap is if the same vertex is shared else where on the UV map, it will
only select it for that location on the UV map you wish to edit, and not it's shared locations, without
having to use the unweld feature like in most other programs.
Download Lithunwrap