The basic problem with your evaluations is that they make very little allowance for the dynamic features of the position like where are the opponent's pieces, especially king, and what stage of the game - opening, middle game, end game - although you do mention this briefly it is much more important.
Here are some additional factors, although these are generalizations which are not 100% strict rules:
1) In the opening the queen and rooks should rarely venture out into the middle of the board. In the middle game they are best operating from behind their lines but on open files and diagonals or ones which will soon be opened, by pushing and / or exchanging a pawn for instance. In the endgame they are better attacking enemy pieces and pawns and especially the king rather than defending their own.
2) Rooks are much stronger if they are connected (true in all phases of the game) and can be deadly if they are connected close to the opponent's king.
3) Established / supported knights and bishops close to the enemy king are very strong.
4) Doubled pawns are weak
5) Isolated pawns are weak
6) Two pawns standing side by side are generally stronger / more of a threat than where one pawn is supporting the other.
7) Pawns, in the middle game, which are close to the enemy king are much stronger than just the extra you give them for being advanced.
8) Knights are stronger than bishops if they have access to good center squares from which they can not be easily evicted.
9) Bishops are weak if the center is badly blocked and they have little freedom of movement (not many squares they can go to)
10) Weaker pieces, like bishops and rooks, are stronger if they point at stronger enemy pieces like king or queen even though there are pieces in the way. It makes it more dangerous for the enemy to move any of his pieces and you may be able to create threats to move your pieces out of the way.
I'm sure there are many more such general rules / guidelines which could be given, but you get the idea.
One crude way you could implement some of these ideas would be to have flags for these features which apply to the different pieces to which you give values if they are true.