All of the API calls that read a variable's value, either to get its type or get its value, read the value exactly once per API call. This is important to understand the behavior of dynamic objects. If you just use seGetXXX, the value is read, converted to the required type, and returned to you. This is the preferred method. However, you may want to read the type then get the value of that particular type, presumably to do different things based on the variable's type. Understand that this involves two calls to API functions that read the value, one to seGetType and one to a seGetXXX. This means the value will be read twice. If the object the member is being retrieved from is dynamic, that dynamic get will be called twice. It is possible for it to return two different values, defeating the purpose of your code.
In this situation, because seGetXXX is safe, your code will not crash just operate unexpectedly. You can ignore such objects and let the object's designer worry about it. Alternately, you can use seAssign to grab the value and store it in a temporary location. This will read the value once. Now you can use seGetType and seGetXXX on that stored value, knowing it will not change.