The image is actually uploaded, but the uploading status gets stuck in the library UI. Try refreshing media library / clearing browser cache
Use one main LocalBusiness/ProfessionalService schema on the homepage, and add Service schema (not full LocalBusiness) on each location page.
1: use a small custom plugin, wp_head function is fine, but plugin is more maintainable.
2: Homepage = LocalBusiness schema, Location/service pages = Service schema
3: Use wp_json_encode() and output inside a <script type="application/ld+json"> tag
4: Use:
wp_head (for output)
wp_footer (optional)
add_action() in a custom plugin
wp_json_encode() for safe JSON