Been talking to Ben earlier tonight for ideas/testing etc for this, going well!
I'm trying to get a scripted version of the ROAD_BLOCK_TANK_MAN working (it will desync if you use them in multipler if you have roads with arrows on the, and even Ben said they sometimes desync in his Army Base level which has no roads for tanks to spawn on) but running into some rather unintended effects...
Code:
IF ( ( IS_CHARACTER_IN_CAR ( tank_driver_guy , tank01 ) )
AND ( incar = 0 ) )
SET incar = 1
STOP_CHAR_DRIVING ( tank_driver_guy )
SET_CHAR_TO_USE_CAR_WEAPON ( tank_driver_guy , ON )
SET_CHAR_TO_STAY_IN_CAR ( tank_driver_guy , ON )
SET_CHAR_MAX_DRIVESPEED ( tank_driver_guy , 0.0 )
SET_CHAR_THREAT_SEARCH ( tank_driver_guy , AREA_PLAYER_ONLY )
SET_CHAR_THREAT_REACTION ( tank_driver_guy , REACT_AS_NORMAL )
SET_CHAR_OBJECTIVE ( tank_driver_guy , KILL_CHAR_ANY_MEANS , player_1 )
ENDIF
The above is what I've tested so far, even adding the tank driver to a gang and setting the respect to -5. The objective I've tried changing multiple times (even removing it thinking he would fire because of the gang respect) but quite strange. If the tank is on-screen, he does nothing. Once off-screen he will drive EXTREMELY quickly, stop and then try shooting in the tank. Even setting him to stop driving and setting car speed won't work! It's unfortunate there isn't a general kill something command from a tank as it will shoot at objects just fine.
Setting objective to things like GUARD_SPOT and GUARD_AREA will not work and makes the game crash if set to an NPC inside a car. Same goes for DESTROY_OBJECT and FIRE_AT_OBJECT_FROM_VEHICLE will crash if set to a player (unsurprisingly). It is a pity that the ROAD_BLOCK_TANK_MAN desyncs as this is perfect and will shoot at everyone without needing to switch targets via code etc.
Still, I'll try random things and see what happens

Edit: I'll also do a test with the different character occupations to see how "tough" they are tomorrow (as to your question of giving NPC's armour). Will test with a pistol and see how many hits they take before dropping dead!
Edit 2: Gone through the list of occupations but came up with some pretty strange results. There seems to be no way of setting how much health they have, and I thought their health was linked by their occupation type (you'd think an FBI agent would be tougher than a DUMMY character) but apparently not. Each occupation character took exactly 2 pistol hits to kill, including occupations such as DUMMY, FBI and ARMY (in comparison, a normal ped on street takes 1 pistol round to kill, FBI takes 5 pistol rounds to kill and army also takes 1 pistol round to kill). However, for occupations such as SWAT, POLICE, ARMY and FBI you'd get a wanted level if you fired on-screen with them nearby and they will chase you. It would seem that any created character by script will always have a set amount of health.
Sektor made a little code-snippet giving a character the appearance of more health by using counters and checking weapon hits, you can find it
here. However, depending how many FBI guys you want to make yourself this could get quite long-winded.
Still no luck with the tank shooting so far

Tried more combinations such as setting tank drivers occupation to ARMY, POLICE etc and having 6 star wanted level and still sits there doing nothing. Gah!