Sorry, I forgot to mention this
Yes, this bug was indeed fixed with the latest server update, however, it's only fixed on servers. There was no update for the game, so a plugin using this event will work in multiplayer, but not in singleplayer (a fix for the game will probably be available in the next couple of days).
About the tanning rack, that's a good point! The tanning rack and the gramophone are two very special cases... they're not meta objects, because they don't require any additional processing by the game and they don't really hold an item (the hide on the rack, for example, is not an actual item, instead it's handled by the object info field).
This is indeed a bit problematic in this case... turning both objects into meta objects would be certainly the cleanest solution, but that's a bigger change requiring a world conversion (and for the tanning rack it also requires a few more adjustments, because as mentioned above, the pelt on the rack is not an item - it will require a definition for items to be represented as a different model on a per-object basis) 
The API event does turn the tanning rack into a (fake) meta object (that's why it's not null), but calling any methods on it won't work...
Not sure about the best solution for now... maybe it would help if the event just had a getRelatedObject() method (which returns the ObjectElement instead of a MetaObject). Or maybe an additional getRelatedObjectDefinition() helps (so getMetaObject() would return null for the tanning rack, but getRelatedObjectDefinition() would still return the tanning rack definition)?
Perhaps it might also work if there was a place target enum provided (which would contain values like "Persistent", "MetaObject", "TanningRack" etc) 