Смотрите, вот ваш код:
procedure TfmMain.LoadBitmapFromURL(const AURL: string; const AItem: TListViewItem; aBitmap: TBitmap; aSourceBmp: TRectangle);
var
K: Integer; // Анонимная процедура захватывает локальную переменную, а не обращается к AItem, которой уже может не быть в момент _окончания_ скачивания фотки
FHTTPClient : THTTPClient;
ResourceStream: TResourceStream;
begin
Вы используете асинхронный вызов FHTTPClient.BeginGet , начинает выполнятся HTTP запрос, одновременно процедура LoadBitmapFromURL завершает работу и компилятор уничтожает локальные переменные, включая FHTTPClient. Асинхронные вызовы с получением результат происходят уже после уничтожения FHTTPClient и естественно ничего не работает. Вод виндой работает случайно - из за другой модели управления памятью.
У вас несколько путей:
1. Сделать FHTTPClient глобальным - лучший и простой путь.
2. Создавать поток самостоятельно, использовать в нем FHTTPClient.Get (не асинхронный)
3. И еще куча вариантов....
Посмотрите как реализовано у меня (по первому варианту)