后来农民起义军逐渐发展壮大,至隋大业十三年(617年)左右,在全国范围内大致形成了三支强大的队伍:翟让、李密领导的瓦岗军,窦建德、刘黑闼领导的河北义军和杜伏威、辅公佑领导的江淮义军。到了此时,程咬金组织的地方自保势力已经无法维持下去,最后投奔了瓦岗军李密,李密任用他为内军骠骑。“内军”是李密从军中挑选的八千个勇士,隶属四位骠骑统辖,又分为左右两队,主要任务是保护李密。程咬金就是四位骠骑之一,极受重用,李密对内军十分满意,常说:“此八千人可当百万。” 武德元年(618年)九月,占据洛阳的王世充趁着瓦岗军与隋叛臣宇文化及的军队两败俱伤之际,带领两万精锐步骑,在通济渠上架起三座桥梁,准备与瓦岗军进行决战。李密在邙山南麓摆阵迎战王世充,程咬金率领内马军,与李密安营在北邙山上;另一大将秦叔宝则领外马军,安营在偃师城北。王世充首先率军猛攻单雄信,李密派出程咬金和大将裴行俨前去支援。战斗中,裴行俨被流箭射中坠下战马,程咬金赶紧营救,刺杀了冲上来的好几个敌军士兵才将裴行俨救到马上。他带着裴行俨向后撤退,由于战马承载了两个人而跑不快,半路上被王世充的骑兵赶上。程咬金奋力反击,不料却被一支马槊刺中。他回身将这根马槊生生折断并斩杀了追击的敌兵,两人都身受重伤,但平安回到了瓦岗军的大营。此战由于李密指挥不利,瓦岗军遭受重创,实力大损。不久,瓦岗军不敌王世充军的强大攻势,兵败如山倒,李密见大势已去,撇下众人,投奔李渊而去,程咬金与同在瓦岗军的秦叔宝归降了王世充。
王世充对程咬金十分优待,但程咬金和秦叔宝都非常讨厌王世充的为人,他们暗自寻找机会,准备另投明主。武德二年(619年)闰二月,王世充率军与唐军李世民部战于九曲,程咬金列阵迎战。忽然与秦叔宝等人在马上向王世充拱手道:“蒙受公的接待,很想报恩。但是公性情爱猜疑,身边又多小人,不是我们托身的地方,现在恭敬辞别!”然后与左右数十人跃马奔向唐军。王世充因惧怕程咬金等人的勇武,竟不敢追赶。