We might get more progress on this if everyone whose working on it posted the raws they have and the results those get them.
Also, it might be possible that it's having the "slavery is okay" ethic that is causing the OP's situation, just as my 2 cents.
I'm game.
Here's how I made Dwarves who are Pets to other Dwarves. I used the [PET] and [trAINABLE] tags as well as making them roaming and giving them the Mountain biome. So far I haven't encountered a wild dwarf, but I'm hoping that I can.
[CREATURE:DWARF]
[NAME:dwarf:dwarves:dwarven]
[TILE:1][COLOR:3:0:0]
[GENPOWER:3]
[BIOME:ANY_LAND]
[BIOME:MOUNTAIN]
[POPULATION_NUMBER:10:20]
[INTELLIGENT]
[COMMON_DOMESTIC][trAINABLE][PET]
[LARGE_ROAMING]
[trANCES]
[BENIGN]
[CANOPENDOORS]
[PREFSTRING:beards]
[BODY:HUMANOID:2EYES:2EARS:NOSE:2LUNGS:HEART:GUTS:ORGANS:HUMANOID_JOINTS:THROAT:NECK:SPINE:BRAIN:5FINGERS:5TOES:MOUTH]
[STOUT]
[MAXAGE:150:170]
[ATTACK:MAIN:BYTYPE:GRASP:punch:punches:1:2:BLUDGEON][ATTACKFLAG_WITH]
[ATTACK:SECOND:BYTYPE:MOUTH:bite:bites:1:1:GORE][ATTACKFLAG_CANLATCH]
[CHILD:12][BABY:1][MULTIPLE_LITTER_RARE]
[DAMBLOCK:1]
[FAT:3]
[SIZE:6]
[EQUIPS]
[CAVE_ADAPT]
[DIURNAL]
[CRAFTSMAN_NAME:craftsdwarf:craftsdwarves]
[FISHERMAN_NAME:fisherdwarf:fisherdwarves]
[HAMMERMAN_NAME:hammerdwarf:hammerdwarves]
[SPEARMAN_NAME:speardwarf:speardwarves]
[CROSSBOWMAN_NAME:marksdwarf:marksdwarves]
[AXEMAN_NAME:axedwarf:axedwarves]
[SWORDSMAN_NAME:swordsdwarf:swordsdwarves]
[MACEMAN_NAME:macedwarf:macedwarves]
[PIKEMAN_NAME:pikedwarf:pikedwarves]
[BOWMAN_NAME:bowdwarf:bowdwarves]
[SPEECH:dwarf.txt]
[STANDARD_FLESH]
[HOMEOTHERM:10067]
[LAYERING:50]
[ALCOHOL_DEPENDENT]
[SWIMS_LEARNED][SWIM_SPEED:2500]
[PERSONALITY:IMMODERATION:0:55:100]
[PERSONALITY:VULNERABILITY:0:45:100]
[PERSONALITY:STRAIGHTFORWARDNESS:0:55:100]