I had a similar problem once when making a component to capture the contents of a TLayout. In the tests some components were not showing in a screenshot taken with TLayout.MakeScreenshot.
This is due to the fact that when you create a TLabel in code it is not automatically painted when you parent it to a TPanel. It is painted only when actually shown for the first time. Hence if you do something like this, the label will not show:
var
NewLabel: TLabel;
Shot: TBitmap;
...
NewLabel := TLabel.Create;
NewLabel.Parent := Panel1; // I suppose you are setting the parent like this in your code
NewLabel.Text := 'some new label';
Shot := Panel1.MakeScreenshot;
To make the labels show you have to make them paint on the TPanel canvas. I did it with the ApplyStyleLookup method like:
...
NewLabel.Text := 'some new label';
NewLabel.ApplyStyleLookup;
Shot := Panel1.MakeScreenshot; // Now the label will show
You will have to call ApplyStyleLookup for each label to make them appear.
It is the same if you set AutoSize of the TLabel to true and set the text. The Width of the label will not adjust before it is actually shown on the form.
I haven't looked this up in detail in the FMX source code, but is probably a bug somewhere, because it affects only some components.
You haven't shown your code, so I'm not sure if this is the same problem, but sure sounds like it.
Btw, you probably know that you can't update the FMX controls directly from another thread because they are not thread-safe, right? And you also Free the TBitmap returned from MakeScreenshot?