I found the exact problem, but I want you to vote for you to help me figure it out and give credit to GSerg, because although I was not at all unlucky, he was dead by his proposal that
Excel really wants to make some range properties inaccessible at certain stages of the calculation.
Good to find GSerg.
The problem was event handlers . The book contains a series of event handlers such as Workbook_Open, Worksheet_Change, etc. From time to time, one of the actions performed by these event handlers will result in the redistribution of some cells in the book. If excel starts recounting while the macro is running, any cells containing this UDF will result in an error. This is because, for some reason, the .HasFormula property was not available during the recalculated VBA recalculation, as @GSerg said: 
Presumably - the next bit is the oversight of the Excel part, but as soon as the macro is executed, if recounting is performed, which will lead to errors, since UDFs do not work properly, excel will not try to start UDF again, the resulting error value will be considered the return value of the call and will not change if it is not considered that the parameter of this UDF has changed. Excel will cache the result of calling the User Defined Function until its reference to the parameter changes.
That is why the transition to the "Evaluate Formula" will show everything that works until the very last step, where it does not actually evaluate the last step, it just shows the value from the table, as calculated by the last.
Decision
There were actually two possible solutions. The first solution I found was to turn off automatic calculation at the beginning of event handlers and turn it back on. For some reason, despite the fact that the macro works at the time of calculation, the value xlCalculationAutomatic is returned, this will lead to a successful re-evaluation of the UDF and the property will be available.
The second solution, which I prefer, because it prevents an accidental repetition of this case, is to use another method to test the formula:
Function CellIsFormula(ByRef rng As Range) As Boolean CellIsFormula = Left(rng(1).Formula, 1) = "=" End Function
The .Formula property is never inaccessible. Therefore, this problem never arises.