Не знаю, что такое \@extra@binfo, но, насколько я понимаю, вы его то используете, то не используете как часть имени переменной; работает, наверно, из-за того, что сейчас оно пустое.
Я тоже не знаю, что это такое, взял из кода hyperref.sty как есть. Там эта переменная определяется пустой строкой и при каких условиях и чем она может заполняться - непонятно.
Вообще-то в коде есть ещё что поулучшать. Например, этот \mycite нормально работает только с одним аргументом, в отличие от фирменного \cite, который может принимать и корректно обрабатывать в аргументе список меток, разделённых запятыми. И, разумеется, он не принимает опциональный аргумент, который у фирменного \cite используется для дополнительных комментариев, печатаемых внутри квадратных скобок (типа указания раздела или страницы в источнике). Но с этим уже не хочется возиться. В конце концов, в тех редких случаях, когда у меня в сносках встретится такое, можно отредактировать руками.
Ещё одно направление для улучшения - это защитить текст аннотации от случайного появления всяческих специальных символов, типа слешей или несбалансированных скобок. Хотя я сомневаюсь, что мне понадобится писать в комментариях слеши или несбалансированные скобки, но потом как-нибудь это можно будет сделать. Для этого, вроде, есть специальная команда, \pdfescapestring, если не ошибаюсь.
Как вариант, можно попробовать раскрывать не всё на свете, а только \mycite (вполне возможно, что тогда удастся обойтись без этих дурацких изменений каткодов).
Почему же дурацких? По-моему, очень логичное и красивое решение. И вряд ли оно может что-то испортить, поскольку изменения действуют только внутри макроса. Если я правильно понял, все эти назначения каткода 13 для байтов в диапазоне кодов 128-255 делает babel, причём исключительно для того, чтобы потом иметь возможность распознать и корректно транслировать в pdf символы utf-8.