Cannot assign material to the correct face
You are dealing with two issues: non-planar geometry and the interpolation generated by the subsurf modifier.

Let's start with the second.

The subsurf modifier is designed to make things rounder by subdividing the existing faces and make them smoother. If the faces are too big for the complex shapes you are trying to achieve, you'll see artifacts.



The solution is to edit your mesh with a bit more density so that the shapes are better described. Then the subsurf modifier will not be interpolating the surfaces and it's materials in such a drastic way.



Now, for an explanation of how to deal with non-planar geometry read this answer