李怀光是渤海靺鞨族人。本来姓茹,他的祖先从幽州迁来。他父亲茹常任朔方将领,因战功赐姓李,改名叫嘉庆。李怀光从小参军,以武艺高、强壮、勇敢出名,朔方节度使郭子仪对他越来越看重。上元年间,官升到太仆、太常卿,主管右衙军队,爵位升到开府仪同三司,任朔方军都虞候。永泰初年,封爵食实封三百户。大历六年(771),兼任御史中丞,隔了一年,兼任御史大夫、升任军都虞候。生性清约勤勉严厉勇猛,而且敢于执法,即使亲戚违反军法,都不宽减回避。郭子仪生性宽厚,不亲自管理军中事务,执法由李怀光掌握,军中兵将尤其敬畏他,也称赞他军队治理得好。大历十二年(777),因母亲去世离职。第二年,起用他仍任原任官职,又兼任..、宁、庆三州都将。
唐德宗即皇帝位,免去郭子仪节度副元帅职务,将他管辖的地区划分给各位将领,于是封李怀光复任检校刑部尚书,兼任河中尹、..州刺史、..宁庆晋绛慈隰节度支度营田观察押诸蕃部落等使。此前,李怀光连续几年带兵在长武筑城用来驻扎军队,城位于原州前端,临近泾水,俯视交通要道,吐蕃从此不敢向南入侵,成了西边的要塞。建中初年,泾原、四镇节度使段秀实因宰相杨炎厌恶,被征调任司农卿。皇帝将要再在原州筑城,就任命李怀光兼任泾州刺史,泾原、四镇、北庭节度使。当时李怀光泄私愤,刚杀了朔方旧将温儒雅等几人,泾州兵将都害怕他。刘文喜利用大家不想要他统率,就据城叛变。皇帝下诏命朱氵此和李怀光率军征服了他们。加封李怀光为检校太子少师。建中二年(781),又加封检校左仆射,兼任灵州大都督、单于镇北大都护、朔方节度支度营田观察盐池押诸蕃部落六城水运使,封爵食实封四百户。..宁节度等使职务同以前一样。
当时马燧、李抱真等军共同攻打魏城没攻下,朱滔、王武俊也都反叛了,合兵援救田悦。建中三年(782),皇帝下诏派李怀光率朔方步、骑兵一万五千名去共同征讨田悦。李怀光有勇无谋,到魏城的当天,营寨还没修筑,就和朱滔等在惬山大战,被朱滔等打败。又遭田悦决河水冲淹,各军情况不好,就和马燧等带兵退到魏县。不久加封为同中书门下平章事,增爵食实封两百户。从此和朱滔等对峙没有作战。第二年十月,泾原军队叛变,皇帝逃到奉天。朱氵此已自立国号,皇帝派宦官骑马告诉河北众将,李怀光带兵火速勤王。当时道路泥泞,李怀光激励兵将,从蒲津渡过黄河,在醴泉打败了朱氵此的骑兵,直奔奉天。前几天,他先派偏将张韶带着奏章藏在蜡丸里随着叛军攻城,乘机会越过壕沟,对城上人喊道:“我是朔方军的使者。”就拉着绳子爬上城去,等上了城,身上中了几十箭。当时皇帝在重重包围之中,守城形势非常危急,知道李怀光的军队来了,命张韶在城上宣布这消息,军心才安定了。李怀光又在鲁店打败了朱氵此军队,朱氵此才解围退回长安。
李怀光生性粗暴浅薄自负,一路上多次说卢杞、赵赞、白志贞都是奸臣,并且说:“天下混乱,都是因为这些人,我见了皇上,将请求杀了他们。”卢杞等暗地知道了,很害怕,因此劝说皇帝命李怀光乘胜追击朱氵此,收复京城,不能让他到奉天来,唐德宗同意了这意见。李怀光在咸阳驻军,多次奏本揭露卢杞等人的罪状恶行,皇帝不得已为此贬卢杞、赵赞、白志贞的官来安抚他。他又奏本告宦官翟文秀,他也是皇帝信任重用的,皇帝又杀了他。李怀光既不敢进兵,拖延了时间又怕受惩罚,因此想叛乱。先前,皇帝下诏派崔汉衡出使吐蕃,要求吐蕃派兵帮助收复京城,吐蕃宰相尚结赞说:“按吐蕃的规矩,进兵以掌兵大臣的官印和意见为凭证。现接到你们的文书,没有李怀光的签名和官印,因此不敢进兵。”皇帝听了,派翰林学士陆贽到李怀光这里来商议借用吐蕃军队,李怀光多次坚持说不行,不肯在文书上签名,言语不敬,并对陆贽说:“你有什么能耐?”兴元元年(784)二月,皇帝下诏加封他为太尉,并赐给他铁券,派李升和宦官邓鸣鹤去送铁券和宣读诏书。李怀光大怒,把铁券扔到地上说:“凡是臣子反叛,才赐给铁券,现赐给我,是叫我反叛。”言语态度更加放肆,众人听了感到害怕。
当时李怀光部下将领韩腢带部队在奉天,李怀光就给他写信,约时间命他反叛,他秘密报告了这事。第二天,李怀光又派人催促他,他又报告了。几天后,李怀光又派人催他,被守城门的抓住了。李怀光又公开说:“我现与朱氵此联合,皇帝应该躲开。”因此皇帝急忙逃到梁州。当时李晟已经将军队移驻东渭桥,李怀光又劫持李建徽、阳惠元等,吞并了他们的军队,移驻好田寺,他的部下很多人不想叛变。此前朱氵此很害怕他,到这时想乘机要他称臣。李怀光掳掠不到东西,更加害怕站不住脚,过了二十天,就指挥军队分为几支,掳掠泾阳、三原、富平,经同州开往河中。神策军将领孟涉、段威勇率兵三千多人从三原逃离投奔李晟,李怀光无法阻拦。韩腢杀死李怀光的留后张昕,率..州归顺皇帝。戴休颜在奉天对军队宣布说:“李怀光已经反叛。”就命令守城并写奏章报告。皇帝于是任命韩腢、戴休颜为节度使。又解除了李怀光太子太保的爵位,罢免了他其余的官职,他管辖的地区委托军队选一名功劳大威望高的人统管,但没有人响应诏书。四月份,李怀光到达河中,又窃据同、绛等州,按兵不动观望形势。
李晟收复了京城,皇帝派给事中孔巢父、宦官啖守盈带诏书调他进京,李怀光穿白色服装接受命令。孔巢父就对众人大声说:“李怀光军中谁能掌管军中事务?”李怀光的侍从都是胡人,因此发怒了,乱挥兵器杀死了孔巢父和啖守盈,从此整理军备增加防御设施。皇帝回到了京城,任命浑王咸为河中节度副元帅,率兵讨伐李怀光。浑王咸攻占了同州,就驻守不进攻了,几次被李怀光打败。当时连年旱、蝗灾,京城刚收复,军需供应不上,上奏的人多请求赦免李怀光。当时河东节度使马燧威望名声一直很高,于是加封马燧为副元帅,和浑王咸及镇国军节度骆元光、..宁节度韩腢、..坊节度唐朝臣合兵一起讨伐李怀光。马燧率兵攻占绛州,到了宝鼎,怕李怀光西逃,侵犯京城,就离开军队进京朝拜。归来后,和浑王咸先从河东召降了李怀光的勇将尉王圭、徐庭光,统率各军包围了河中。贞元元年(785)秋天,朔方军将领牛名俊割下李怀光的头投降了马燧,李怀光的儿子李王隹用刀杀死了他的几个弟弟,就自杀了。李怀光死时享年五十七岁。不久皇帝下诏立一个儿子做继承人,赐给他庄园住宅各一处。又送还了李怀光的尸体和头,让他收拾安葬,把李怀光的妻子和儿子都迁到澧州。贞元五年(789),又下诏书说:
“怀念故人的功劳,是重要的仁德;兴复灭绝的家族,是重要的义举。过去蔡叔家族衰败,周公把他的儿子封为东方诸侯,韩王信反叛,汉文帝把他的儿子封为弓高侯。侯君集不遵王法,太宗皇帝保留他的后代主持祭祀。详细考查先王的做法,以至祖先的教诲,都是用刑法来辅佐仁德,使人守法,用斧钺施刑、甲兵征讨,是不得已才做的事。前几年叛贼突然叛乱,国家前途堪忧,我移居京郊,约期讨伐,要调动讨逆大军,讨平叛逆,征调军队的命令没传达到各军,卫兵正遭精锐敌军进攻,情况危急。李怀光率军先发,从千里外来救援,上顺天意,赶走了暴虐的叛军。我正要论功行赏,可惜他不终守臣节,暗萌叛意,违背我的命令,背叛国家与叛逆勾结,放弃忠君选择叛逆。做臣下到这地步,按国法定要杀头,我还招抚他,希望他回心转意,但他叛行愈显,一意孤行,大兵讨伐,竟至灭门。虽然他咎由自取、自绝于国家和人民,但怀念他有功劳,却成为孤鬼无人祭祀,想起来心里不安,因此感到难过。我想大发慈悲,用这改变风气。保持太平,希望无人违法。应将李怀光外孙燕八八赐姓李,改名承绪,任命为左卫率府胄曹参军,成为李怀光继承人。还赐钱一千贯,让他任意在李怀光墓边购地建庄园,侍奉赡养李怀光的妻子王氏,并谨守四季祭祀礼节。啊!我虽不够仁德,却要管理万民,原谅别人的过失,是我的愿望。你应继承家业,尽力持家,努力继续像你父亲那样为国立功,不要像他那样违背命令。”
当初,李怀光被杀,他的儿子李王隹、李瑗都死了,只有他的妻子王氏还在。因此皇帝特地免她一死。到这时又怀念李怀光旧日的功劳,对他没有后人感到难受,就命令李承绪继承他。