Кулагин начал заниматься баскетболом в 6 лет. Выступал за молодёжную команду ЦСКА. В межсезонье 2009 года перешёл в команду «Нижний Новгород», выступавшую во втором по значимости дивизионе российского чемпионата — Суперлиге Б[1]. Быстро стал игроком основного состава. Вместе с ним клуб в том же сезоне вышел в Суперлигу А, которая сменила своё название на Профессиональную баскетбольную лигу.
Несмотря на то, что перед сезоном 2010/11 команда укрепилась рядом игроков, Кулагин остался в ней на ведущих ролях, проводя на паркете в среднем по 20 минут и показывая солидную игру[2]. Тренер подмосковного «Триумфа»Вальдемарас Хомичюс назвал Дмитрия одним из открытий первого круга чемпионата[3]. В розыгрыше Кубка России 2010/11 БК «Нижний Новгород» впервые в своей истории принял участие в Финале четырёх. Обыграв в полуфинале красноярский «Енисей», нижегородцы не справились в решающем поединке со «Спартаком» из Санкт-Петербурга и завоевали серебряные медали. Дмитрий Кулагин вошёл в символическую пятёрку как лучший разыгрывающий.
В конце марта 2011 года Дмитрий Кулагин оказался в больнице после драки около ночного клуба. Из-за этого спортсмен пропустил матч всех звёзд ПБЛ, в котором должен был принять участие, и несколько игр своего клуба[4]. В результате Кулагин был назван главным тренером нижегородского клуба Зораном Лукичем главным разочарованием сезона[5].
27 мая 2011 года клуб принял решение расстаться с молодым защитником. По словам генерального менеджера «Нижнего Новгорода» Сергея Панова, причиной стала недостаточная ответственность игрока[6].
12 июля 2011 года Кулагин подписал контракт с подмосковным клубом «Триумф»[7].
9 июля 2012 года Кулагин подписал контракт с самарским клубом «Красные крылья»[8]. В составе «Красных крыльев» Кулагин стал обладателем Кубка России и Кубка вызова ФИБА. В матчах Единой лиги ВТБ он набирал в среднем 5,5 очка и 1,7 подбора за игру, в Еврочеллендже — 4,2 очка и 1,8 подбора.
2 сентября 2013 года Кулагин вернулся в подмосковный клуб «Триумф».
14 июля 2015 года подписал контракт с московским ЦСКА по схеме «1+2»[9]. Провёл за сезон 2015/2016 в общей сложности 49 матчей, в том числе дебютировав в Евролиге. Дебют состоялся в домашнем матче с Барселоной, в котором Кулагин набрал 10 очков и отдал 3 результативные передачи. В июле 2016 году клуб воспользовался имевшейся опцией и продлил контракт с защитником, изменив по обоюдному соглашению его сроки до 1 года[10].
В октябре 2017 года подписал двухлетний контракт с «Локомотивом-Кубанью», в составе которого в феврале 2018 года стал обладателем Кубка России. Был признан самым ценным игроком «Финала четырёх» турнира.
25 июня 2021 подписал однолетний контракт с клубом «Зенит». Летом 2022 года «Зенит» продлил контракт с Кулагиным на два года.
С 2023 года выступает в составе казанского «Уникс» и помог команде в чемпионате-2023/24 выиграть серебряные медали. Был назначен капитаном команды в сезоне 2024/25.
Карьера в сборной
На чемпионате Европы 2008 года для игроков до 16 лет, несмотря на то, что сборная России заняла только восьмое место, Дмитрий Кулагин вошёл в символическую сборную турнира, став вторым по результативности (в среднем 20,8 очков за игру)[11].
Был лидером сборной России на чемпионате Европы 2010 года для игроков до 18 лет, особенно отличившись в игре против сборной Сербии, в которой набрал 23 очка и сделал 8 передач, 7 подборов и 5 перехватов[12]. Во многом благодаря игре Кулагина сборная впервые в своей истории дошла до стадии полуфиналов и вышла в финал соревнований, где уступила сборной Литвы[13][14]. По результатам турнира Дмитрий был признан лучшим разыгрывающим, специалисты отметили его способность понимать игру, позволившую ему стать лидером турнира по количеству перехватов (в среднем 2,6 за игру)[15]. После этого успеха был номинирован на звание лучшего игрока Европы до 20 лет 2010 года[16]. По результатам голосования, однако, занял последнее место из 15 кандидатов[17].
В 2011 году Кулагин принял участие в чемпионате мира среди игроков до 19 лет, проходившем в Латвии[18]. Кулагин был одним из лидеров команды, ярко проявив себя в ряде матчей. Во многом благодаря его игре сборная России сенсационно обыграла в четвертьфинале сборную США[19], и уступив в полуфинале литовцам[20], завоевала в матче за третье место бронзу[21]. Во всех трёх матчах плей-офф Кулагин набирал больше 20 очков и был лидером по этому показателю среди россиян. По результатам турнира он был включён в пятёрку его звёзд и признан лучшим атакующим защитником.